Tjohohan Ответов: 2

Как мне более легко исключить целые числа, не являющиеся простыми целыми числами


Привет :)

(Это я пытаюсь разобраться в простых числах и программировании. Это мой навык lvl.)

Как мне более легко исключить целые числа, не являющиеся простыми целыми числами?

Пропускает четные числа


"""
If number is the next prime number it is returned as the next prime
number and it is appended
"""
def Primer(number, primes):
    for prime in primes:
        if number % prime == 0:
            return False
        elif prime >= number/2:
            return True

"""
every other integer that is even number that is evenly devisable
by two is skipped
"""
limit = 2100
primes = [2,3]
for integer in range(max(primes)+ 2, limit, 2):
    if Primer(integer, primes) is True:    
        primes.append(integer)
    else:
        pass

print("len prime_row per num_of_rows: 1/2")        
print("primes", primes)  
print("How many primes: ", len(primes))
print("largest prime", max(primes))


Пропускает каждое начальное простое число в списке, являющемся 2,3,5,7 в программе ниже и проиллюстрированном картинками

На рисунках, позже обозначенных как "строка" в приведенной ниже программе, изображены радиально выровненные целые числа.

На рисунках, позже обозначенных как "круг" в приведенной ниже программе, изображены тангенциально выровненные (или окружность) целые числа.

2 = две строки[^]

2*3 = шесть рядов[^]

2*3*5 = тридцать строк[^]

2*3*5*7= двести десять строк[^]

<pre lang="Python">

"""
A program that generates prime numbers from rows with primes by
excluding rows without primes
"""

"""
If number is the next prime number it is returned as the next prime
number and it is appended
"""
def Primer(number, primes):
    for prime in primes:
        if number % prime == 0:
            return False
        elif prime > number/2:
            return True
"""
When the first number in row is evenly devided by any of initial primes
it is returned as not prime and the row is excluded
"""
def Excluder(number, primes):
    for prime in primes:
        if number % prime == 0:
            return False
"""
The product of intitial primes is the number of rows.
The rows traverse circle gradings
"""
num_of_rows = 1
primes = [2,3,5,7]#initial primes
for prime in primes:
    num_of_rows *= prime

"""
If the first integer in a row is evenly divisable by any of the
initial primes there is no more primes in that row
"""
no_go_row = [0]    
for integer in range(1, num_of_rows, 2):
    if Excluder(integer, primes) is False:
        no_go_row.append(integer)

"""
The odd numbered rows (first number of the row) with primes is put into
the prime_row list
"""
prime_row = []    
for odd in range(1, num_of_rows, 2):
    if odd not in no_go_row:
        prime_row.append(odd)

"""
Completes the first lap (that was beginned by intitial primes) so that
it is in phase when iterating later on
"""
for one_lap in range(0, 1, 1):
    for row in prime_row:
        if Primer(row, primes) is True and row != 1:
                primes.append(row)
        else:
            pass

"""
With mapped out prime_rows and lap one completed it devise integers in
prime rows with former primes turning around and moves out one step
(that is equivalent to adding num_of_rows to number in row) each completed
lap out and confirms the next prime that is appended to prime list
"""
for laps in range(1, 10, 1):
    for row in prime_row:
        if Primer(row + num_of_rows * laps, primes) is True:
                primes.append(row + num_of_rows * laps)
        else:
            pass

print("len prime_row per num_of_rows", len(prime_row)/num_of_rows)        
print("primes", primes)  
print("How many primes: ", len(primes))
print("largest prime", max(primes))


Что я уже пробовал:

Я не знаю, где искать математику, которую я могу понять в отношении того, как часто это окупается, чтобы исключить строки по стоимости для итерации простых чисел из строк, не исключенных (те, у которых есть простые числа). Я попробовал в произвольных условиях и нашел проблему соответствия, где в круге при шаге от, например, 2*3=6 до 2*3*5=30 и остановился при распознавании программы построения с большим количеством условий if вокруг ошибок.

def Primer(number, primes):
    for prime in primes:
        if number % prime == 0:
            return False
        elif prime > number/2:
            return True

def Excluder(number, primes):
    for prime in primes:
        #print("prime in excluder", prime)
        if number % prime == 0:
            return False
        
revolution_length = 1
primes = [2,3]
for prime in primes:
    revolution_length *= prime

start = 0
iteration = 0
prime_buffer = []
revolutions = 2
bound = len(primes)
for rev in range(bound, bound + revolutions, 1):  
     
    primes_exclude_row = []
    for prime in range(rev):
        primes_exclude_row.append(primes[prime])
    print("primes_exclude_row",primes_exclude_row)
    no_go_row = [0]    
    for integer in range(1, revolution_length, 2):
        if Excluder(integer, primes_exclude_row) is False:
            no_go_row.append(integer)

    prime_row = []    
    for odd in range(1, revolution_length, 2):
        if odd not in no_go_row:
            prime_row.append(odd)
            
    print("prime_row",prime_row)
    num_laps = 2
    for laps in range(iteration, iteration + num_laps, 1):
        for row in range(start, len(prime_row), 1):
            print("row + revolution_length*laps", row + revolution_length*laps)
            if Primer(row + revolution_length*laps, primes) is True and row + revolution_length*laps !=1:
                primes.append(row + revolution_length * laps)
            else:
                pass 

    temp = max(primes)
    while True:
        print("temp", temp)
        iteration += 1
        if temp in prime_row:
            start = prime_row.index(temp)
            break
        temp -= revolution_length
        print("temp", temp)
    print("primes",primes)    
    revolution_length *= primes[rev]  
    
print("How many primes: ", len(primes))
print("largest prime", max(primes))

2 Ответов

Рейтинг:
2

Patrice T

Цитата:
Я не знаю, где искать математику, которую я могу понять

Я думаю, что вы изучаете колеса в пробном подразделении alforythm.
Колесная факторизация - Википедия[^]
Простое число - Википедия[^]
Смотрите мою маленькую статью о простой факторизации (пробное деление)
Целочисленная Факторизация: Алгоритм Пробного Деления[^]


Рейтинг:
19

Richard MacCutchan

Видеть Поиск простых чисел[^]


Tjohohan

Спасибо за чаевые! Интересное чтение, я кое-что понял и мог бы прочитать его еще раз и попробовать