как использовать для цикла для вычисления простого числа - PullRequest
0 голосов
/ 11 ноября 2018
for i in range(2, 101):
    for j in range(2, i):
        if (i % j) == 0:
            print(i,"is a composite number")
            break

Я пытался сделать if (i%j) != 0:, но тогда это не сработало (4 не простое число)

Ответы [ 2 ]

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

Используемая вами петля for подходит для поиска простых чисел. Я бы просто еще одно условие: if i > 1:. Также вы хотите напечатать простое число

for i in range(2, 101):
    if i > 1: # Prime numbers are greater than 1
        for j in range(2, i):
            if (i % j) == 0:
                print(i,"is a composite number")
                break
        else:
            print(i,"is a prime number")
0 голосов
/ 11 ноября 2018

Вы можете исправить свой оригинальный алгоритм так:

for i in range(2, 101):
    if all([(i % j) for j in range(2, i)]):
        print(i,"is a prime number")

В общем, вам, вероятно, лучше использовать / учиться по установленным алгоритмам в подобных случаях. Вот реализация Python известного алгоритма ( Сито Эратосфена ) для генерации первых простых чисел n (кредит для кода tech.io для кода):

def sieve(n):
    primes = 2*[False] + (n-1)*[True]
    for i in range(2, int(n**0.5+1.5)):
        for j in range(i*i, n+1, i):
            primes[j] = False
    return [prime for prime, checked in enumerate(primes) if checked]

Некоторые результаты теста:

print(sieve(100))
[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]
...