Чтобы найти первые N простых чисел в Python - PullRequest
11 голосов
/ 27 октября 2009

Я новичок в мире программирования. Я просто писал этот код на python для генерации N простых чисел. Пользователь должен ввести значение для N, которое является общим числом простых чисел для распечатки. Я написал этот код, но он не выдает желаемый результат. Вместо этого он печатает простые числа до N-го числа. Например: пользователь вводит значение N = 7. Желаемый результат: 2, 3, 5, 7, 11, 13, 19 Фактический объем производства: 2, 3, 5, 7

Просьба сообщить.

i=1
x = int(input("Enter the number:"))
for k in range (1, (x+1), 1):
    c=0
    for j in range (1, (i+1), 1):
        a = i%j
        if (a==0):
            c = c+1

    if (c==2):
          print (i)
    else:
          k = k-1

    i=i+1

Ответы [ 29 ]

0 голосов
/ 27 октября 2009

Этот код очень запутан, и я не могу точно понять, о чем вы думали, когда писали его, или что вы пытались достичь. Первое, что я хотел бы предложить при попытке выяснить, как кодировать, - это начать с того, чтобы сделать имена переменных чрезвычайно наглядными. Это поможет вам получить представление о том, что вы делаете прямо в голове, а также всем, кто пытается помочь вам показать вам, как правильно сформулировать свои идеи.

При этом, вот пример программы, которая выполняет что-то близкое к цели:

primewanted = int(input("This program will give you the nth prime.\nPlease enter n:"))
if primewanted <= 0:
    print "n must be >= 1"
else:
    lastprime = 2 # 2 is the very first prime number
    primesfound = 1  # Since 2 is the very first prime, we've found 1 prime
    possibleprime = lastprime + 1 # Start search for new primes right after
    while primesfound < primewanted:
        # Start at 2.  Things divisible by 1 might still be prime
        testdivisor = 2
        # Something is still possibly prime if it divided with a remainder.
        still_possibly_prime = ((possibleprime % testdivisor) != 0)
        # (testdivisor + 1) because we never want to divide a number by itself.
        while still_possibly_prime and ((testdivisor + 1) < possibleprime):
            testdivisor = testdivisor + 1
            still_possibly_prime = ((possibleprime % testdivisor) != 0)
        # If after all that looping the prime is still possibly prime,
        # then it is prime.
        if still_possibly_prime:
            lastprime = possibleprime
            primesfound = primesfound + 1
        # Go on ahead to see if the next number is prime
        possibleprime = possibleprime + 1
    print "This nth prime is:", lastprime

Этот бит кода:

        testdivisor = 2
        # Something is still possibly prime if it divided with a remainder.
        still_possibly_prime = ((possibleprime % testdivisor) != 0)
        # (testdivisor + 1) because we never want to divide a number by itself.
        while still_possibly_prime and ((testdivisor + 1) < possibleprime):
            testdivisor = testdivisor + 1
            still_possibly_prime = ((possibleprime % testdivisor) != 0)

может быть заменено несколько медленным, но, возможно, более понятным:

        # Assume the number is prime until we prove otherwise
        still_possibly_prime = True
        # Start at 2.  Things divisible by 1 might still be prime
        for testdivisor in xrange(2, possibleprime, 1):
            # Something is still possibly prime if it divided with a
            # remainder.  And if it is ever found to be not prime, it's not
            # prime, so never check again.
            if still_possibly_prime:
                still_possibly_prime = ((possibleprime % testdivisor) != 0)
0 голосов
/ 14 мая 2019
#!/usr/bin/python3
import sys

primary_numbers = [1, 2]


def is_prime(i):
    for pn in enumerate(primary_numbers[2:]):
        if i % pn[1] == 0:
            return False

    return True

def main(position):
    i = 3
    while len(primary_numbers) < int(position):
        print(i)
        res = is_prime(i)
        if res:
            primary_numbers.append(i)
        i += 2


if __name__ == '__main__':
    position = sys.argv[1]
    main(position)
    print(primary_numbers)
0 голосов
/ 24 апреля 2013

Это может помочь:

def in_prime(n):
    p=True
    i=2
    if i**2<=n:
        if n%i==0:
            p=False
            break
    if (p):
        return n
0 голосов
/ 13 августа 2018

Ответ здесь прост, т.е. запустите цикл n раз.

n=int(input())
count=0
i=2
while count<n:
    flag=0
    j=2
    while j<=int(i**0.5):
        if i%j==0:
            flag+=1
        j+=1
    if flag==0:
        print(i,end=" ")
        count+=1
    i+=1
0 голосов
/ 04 ноября 2015

Это моя версия

import timeit
import math

__author__ = 'rain'


primes = [2]

def is_prime(n):
    for prime in primes:
        if n % prime == 0:
            return False
    return True


def find_nth_prime(n):
    current_index = 0
    while(len(primes) < n):
        if current_index == 0:
            start_value = 3
            end_value = 2 * 2
        else:
            start_value = primes[current_index - 1] * primes[current_index - 1] + 1
            end_value = primes[current_index] * primes[current_index]
        for i in range(start_value, end_value):
            if is_prime(i):
                primes.append(i)
        current_index += 1
    return primes[n-1]


def solve():
    return find_nth_prime(10001)

print solve()

print timeit.timeit(solve, number=10)

Я использую сито для сканирования простых чисел, это довольно быстро

Для получения 10001-го простого числа (10 раз) требуется всего 3,8e-06 секунд.

0 голосов
/ 10 мая 2019

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

for num in range(1,50):     
   for i in range(2,num):    
      if num%i == 0:                  
         break 
   else:                 
      print(num,'is a prime')

Вывод первых 50 простых чисел

0 голосов
/ 29 октября 2012
n=int(input("Enter the number:: "))

for i in range(2,n):
    p=i
    k=0
    for j in range(2,p-1):
        if(p%j==0):
            k=k+1
    if(k==0):
        print(p)
0 голосов
/ 08 июня 2019

Привет! Я очень плохо знаком с кодированием, только начал 4 дня назад. Я написал код, чтобы вернуть первые 1000 простых чисел, включая 1. Посмотрите

n=1
c=0
while n>0:
   for i in range(2,n):
      if n%i == 0:
         break
   else:
      print(n,'is a prime')
      c=c+1
   n=n+1
   if c==1000:
      break
0 голосов
/ 06 сентября 2013

Это может помочь:

import sys
from time import time
def prime(N):
    M=100
    l=[]
    while len(l) < N:
        for i in range(M-100,M):    
            num = filter(lambda y :i % y == 0,(y for y in range(2 ,(i/2)))) 
            if not num and i not in [0,1,4]:
                l.append(i)
        M +=100
    return l[:N]


def dotime(func, n):
    print func.__name__
    start = time()
    print sorted(list(func(n))),len(list(func(n)))
    print 'Time in seconds: ' + str(time() - start)


if __name__ == "__main__":
    dotime(prime, int(sys.argv[1]))
...