Как мне более легко исключить целые числа, не являющиеся простыми целыми числами
Привет :)
(Это я пытаюсь разобраться в простых числах и программировании. Это мой навык 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))