Основной генератор простых чисел

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

По какой-то причине, однако, это не работает, и я не могу понять почему, так как просто пишу числа по ходу дела.

def primenumbers():
    j = 2
    f = open("primes.txt", "w")
    primes = []
    notprimes = []
    ask = input("how many primes? ")
    while len(primes) < int(ask):
        k = 2
        while not(k==j) or not(j%k==0):
            k = k + 1
        if k == j:
            primes.append(j)
            f.write(str(j)+"\n")
        else:
            notprimes.append(j)
#        if len(primes)%1000 == 0:
#            print("There have been " + str(len(primes)) + " primes counted so far")
        j = j + 1
    print("Primes written to file 'primes.txt', " + str(len(primes)) + " written")
    f.close
    return(" ")

Таким образом, программа спрашивает пользователя, сколько простых чисел она должна сгенерировать, и затем она должна повторяться от k=2 до j = j+1, пока не будет достигнуто это число простых чисел.

Кроме того, если возможно, я бы хотел, чтобы закомментированное выражение IF работало, так как когда оно было включено, оно повторяло, какое простое число было несколько раз. РЕДАКТИРОВАТЬ: добавление, что происходит при запуске

how many primes? 1500
There have been 1000 primes counted so far
There have been 1000 primes counted so far
There have been 1000 primes counted so far
There have been 1000 primes counted so far
There have been 1000 primes counted so far
There have been 1000 primes counted so far
There have been 1000 primes counted so far
There have been 1000 primes counted so far
Primes written to file 'primes.txt', 1500 written

1 ответ

Решение

Использование while not(k==j) and not(j%k==0): на месте while not(k==j) or not(j%k==0):Тогда все будет работать нормально.

Я надеюсь, что это код, который вы ищете:

def primenumbers():
    j = 2
    chk = 1
    f = open("primes.txt", "w")
    primes = []
    notprimes = []
    ask = input("how many primes? ")
    while len(primes) < int(ask):
        k = 2
        while not(k==j) and not(j%k==0):
            k = k + 1
        if k == j:
            primes.append(j)
            f.write(str(j)+"\n")
        else:
            notprimes.append(j)
        if len(primes) >= 1000*chk:
            chk = chk + 1
            print("There have been " + str(len(primes)) + " primes counted so far")
        j = j + 1
    print("Primes written to file 'primes.txt', " + str(len(primes)) + " written")
    f.close
    return(" ")
Другие вопросы по тегам