Проверка делимости списка и добавление, если простое число - PullRequest
0 голосов
/ 11 ноября 2018

Я пишу короткий фрагмент для класса, который должен проходить через заданный список чисел и добавлять любые простые числа.Прямо сейчас он возвращает все числа в диапазоне.

Я нашел примеры в Интернете, как это сделать, но хотел попробовать это сам, но я, кажется, ударил стену ... Вотмой код:

from random import randrange
from time import sleep

def prime():
    user_num = eval(input("Input a number: "))
    list_prime = []
    for i in range(2,user_num):
        if (i % 2) == 1 and\
            (i % 3) == 1 and\
            (i % 4) == 1 and\
            (i % 5) == 1 and\
            (i % 6) == 1 and\
            (i % 7) == 1 and\
            (i % 8) == 1 and\
            (i % 9) == 1 or\
            i == 2:
            list_prime.append(i)

if list_prime == '':
    print('No prime numbers.')
if list_prime != '':
    print('\nPrime numbers from 1 to ' + str(user_num) + ': ' + str(list_prime))

sleep(1)
print('\nClosing console in 60 seconds...')
sleep(60)

prime()

Ответы [ 2 ]

0 голосов
/ 11 ноября 2018

Как он сказал, вы не правильно проверяли простые числа.

from random import randrange
from time import sleep

list_prime = []
user_num = 0

def prime():
    user_num = eval(input("Input a number: "))
    for i in range(2,user_num):
        j = 2
        isprime = 1
        while (j <= i/2):
            if (i % j == 0):
                isprime = 0
                break
            j+=1
        if (isprime == 1):
            list_prime.append(i)

prime()
if list_prime == '':
    print('No prime numbers.')
if list_prime != '':
    print('\nPrime numbers from 1 to ' + str(user_num) + ': ' + str(list_prime))

sleep(1)
print('\nClosing console in 60 seconds...')
sleep(60)
0 голосов
/ 11 ноября 2018

Проверка, если результат операции по модулю равен 1, не является правильным подходом. Например, 6% 5 равно 1, но 6 определенно не является простым числом. Вместо этого для каждого подозреваемого N следует проверить, что число X не существует, так что N% X == 0.

Дико неоптимальная реализация может выглядеть так:

list_prime = []
for i in range(2, user_num):
    if all(n % x for x in list_prime):
        list_prime.append(i)
...