Вопрос:

Генератор простых чисел в Python

python random primes

1446 просмотра

2 ответа

120 Репутация автора

Я пытаюсь написать программу для отображения простых чисел в интервале от 2 до 50.

def primeNr(interval):
    print("Prime numbers from 2 to ",interval,"/n")

    for i in range(1, interval):
        c=0
        for j in range(1, i):
            if(i%j==0):
                c+=1
        if(c==2):
            print (i)

но я получаю неправильный вывод (4, 9, 25, 49), когда я вызываю его ( primeNr(50)) - я понятия не имею, почему.

В качестве дополнительного вопроса - Как я могу заставить следующий код возвращать список со следующими числами, а затем, скажем, я хочу иметь две переменные p и q, которые выбирают случайное число из списка простых чисел, например

p=primeNr(50)
q=primeNr(50)

(Да, это связано с RSA).

Автор: bashbin Источник Размещён: 16.04.2017 02:50

Ответы (2)


4 плюса

55751 Репутация автора

rangeне включает его конечный предел. Таким образом, вы находите числа с тремя делителями (которые являются квадратами простых чисел).

Автор: aschepler Размещён: 16.04.2017 02:56

5 плюса

6675 Репутация автора

Второй параметр для диапазона не является включающим, поэтому вам нужно сделать следующее: (вы можете проверить документ здесь: определение диапазона Python )

for j in range(1, i + 1)

Есть некоторые возможности для математического улучшения, например, вам нужно только выполнить цикл math.sqrt, и в первый момент вы поймете, что число не простое, а просто разрыв. (все еще не наиболее оптимизирован, для дальнейшей оптимизации, вы можете проверить различные первичные сита).

import math

def primeNr(interval):
    print("Prime numbers from 2 to ", interval)

    #if interval itself should be included, then change this to range(2, interval + 1)
    for i in range(2, interval):
        isPrime = True
        for j in range(2, int(math.sqrt(i)) + 1):
            if i % j == 0:
                isPrime = False
                break
        if isPrime:
            print(i)

primeNr(50)

Ниже приводятся некоторые предлагаемые правки, сделанные @aryamccarthy (спасибо за идею!). Он использует определенный синтаксис Python - for ... else (Предложение else выполняется, когда цикл завершается нормально, без каких-либо разрывов):

import math

def primeNr(interval):
    print("Prime numbers from 2 to ", interval)

    for i in range(2, interval + 1):
        for j in range(2, int(math.sqrt(i)) + 1):
            if i % j == 0:
                break
        else:
            print(i)

primeNr(50)
Автор: Peter Pei Guo Размещён: 16.04.2017 02:59
Вопросы из категории :
32x32