2016-01-21 3 views
1

Я пытаюсь написать программу, которая находит простые числа.Выполнение отделов по отдельным элементам списка

prime = [2] 
for k in range(3,100) 
    if k%prime != 0 
     prime.append(k) 
print(prime) 

Когда я запускаю программу, я получаю ошибку:

TypeError: unsupported operand type(s) for %: 'int' and 'list' 

Я думаю, что ошибка возникает при попытке разделить на список, но я не совсем уверен, что делать. Любая помощь будет оценена по достоинству.

+0

'k% prime' вы пытаетесь использовать модульное деление с int и списком. Я не уверен, что вы пытаетесь сделать, но это не сработает. –

+0

заменить prime = [2] на prime = 2 – Tobias

+0

Я понял, что это была проблема. Я хочу создать список с двумя в нем, а затем, если он является простым, добавьте его в основной список. Я хочу разделить k на все элементы, которые находятся в списке. –

ответ

0

Вы должны перебирать весь прайм список и убедитесь, что модуль не равен нулю для всех элементов в списке

prime = [2] 
for k in range(3,100): 
    if all(k % p != 0 for p in prime): 
     prime.append(k) 

Оптимизированный (не проверять дополнительные штрихи, как только один главный фактор был найдено):

prime = [2] 
for k in range(3,100): 
    for p in prime: 
     if k % p == 0: 
      break 
    else: 
     prime.append(k) 
+0

Вы забыли «:» после первого! Но спасибо за вашу помощь! Кроме того, я не знаю, что вы подразумеваете под «модулем отличным от нуля». Вы имеете в виду целое число «k»? –

+0

Я также не уверен, что означает переменная «p»? Разве это не «просто»? –

+0

Оператор '%' называется оператором модуля. Он дает остаток после 'x/y'. Если 'x% y == 0', то это означает, что' y' является фактором 'x'. У простых чисел нет других факторов, кроме самих себя, и 1, поэтому, если все возможные факторы числа имеют ненулевой модуль, число не имеет факторов и должно быть простым. –

Смежные вопросы