Попытка получить все простые числа в массиве в Python - PullRequest
0 голосов
/ 15 октября 2018

Я пытаюсь распечатать все простые числа в массиве с именем 'checkMe'.Но я просто не могу заставить его работать.Я успешно создал программу, которая проверяет ее на одно число, но она не работает для массива.Если кто-то знает, что случилось, пожалуйста, скажите мне.Кстати, я большой нуб в Python, так что это, вероятно, не самый красивый код.

checkMe = range(1, 100)

dividers = []
primes = []

for y in checkMe:
    x = y
    for x in range(2, x):
        if (y/x).is_integer():
            dividers.append(x)
    if len(dividers) < 2:
        primes.append(y)

print("\n"+str(checkMe)+" has "+str(len(primes))+" primes")
print(primes)

Вывод:

range(1, 100) has 5 primes
[1, 2, 3, 4, 5]

Ожидаемый вывод:

range(1, 100) has 25 primes
[2, 3, 5, 7, 11, 13, 17, 19, 23, 29, 31, 37, 41, 43, 47, 53, 59, 61, 67, 71, 73, 79, 83,
89, 97]

Ответы [ 3 ]

0 голосов
/ 15 октября 2018

Логика верна, но вы не сбрасываете массив делителей.Также вы должны игнорировать число 1 и число делителей должно быть меньше 1.

это должно работать

checkMe = range(1, 100)
primes = []
for y in checkMe[1:]:
    x = y
    dividers = []
    for x in range(2, x):
        if (y/x).is_integer():
            dividers.append(x)
    if len(dividers) < 1:
        primes.append(y)
print("\n"+str(checkMe)+" has "+str(len(primes))+" primes")
print(primes)

Надеюсь, это помогло вам, пока

0 голосов
/ 15 октября 2018

Пожалуйста, прочтите документы по питону, там много всего https://docs.python.org/3/tutorial/controlflow.html

check_me = range(2, 100)

primes = []
for i in check_me:
    for j in range(2, i):
        if not i % j:
            break
    else:
        primes.append(i)

print(f'{check_me} as {len(primes)} primes\n', *primes)
# range(2, 100) as 25 primes
# 2 3 5 7 11 13 17 19 23 29 31 37 41 43 47 53 59 61 67 71 73 79 83 89 97
0 голосов
/ 15 октября 2018

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

В любом случае, решение вашей проблемы заключается в следующем:

checkMe = range(1, 100)

dividers = []
primes = []

for num in range(1,100):
    prime = True
    for i in range(2,num):
        if (num%i==0):
            prime = False
            dividers.append(num)
    if prime:
        primes.append(num)

print("\n"+ str(checkMe)+ "has "+str(len(primes))+" primes")
print(primes)
...