count=5 #Nth prime number
i=10 #number to be checked
while (count!=1000): #until its not 1000th
if i%2==0 or i%3==0 or i%5==0 or i%7==0: #to check non prime
i=i+1 #next number initialized
else: #for prime
count=count+1 #move to next position
if count==1000: #if is 1000th position
print i," is 1000th prime." #print prime
我正在考虑2,3,5,7已经被称为素数,从10开始。
它给出" 11是第1000个素数"作为输出。 我想,某处存在逻辑错误。
答案 0 :(得分:2)
正如其他人在评论中提到的那样,判断一个数字是否为素数的标准是非常错误的。您只测试它是否可以被前4个素数整除,但这对于大于120的数字是不够的(121可以被11整除,但不能被任何较小的素数整除)。您需要检查之前找到的所有素数(查看" Eratosthenes筛选")。
另一个问题是,当数字为素数时,您不会递增i
。因此,一旦到达11
,您就会继续count
,而不是i
。当count
到达1000
时,您打印i
作为第1,000个素数。从i = i + 1
块中取出if
,每次都应该这样做。
此外,由于偶数数字永远不会是素数(2除外),您可以从i = 11
开始并将其递增2 - 不要浪费时间检查偶数。然后你可以将i % 2 == 0
从测试中拿走。
答案 1 :(得分:0)
顺便说一下,你的代码也是错误的,因为它只会增加" i"当它与条件匹配时,所以当它始终检查时: 如果11%2 == 0或11%3 == 0或11%5 == 0或11%7 == 0:
您的代码的解决方案(不计算第1000个素数):
count=5 #Nth prime number
i=10 #number to be checked
while (count!=1000): #until its not 1000th
if i%2==0 or i%3==0 or i%5==0 or i%7==0: #to check non prime
pass #next number initialized
else: #for prime
count=count+1 #move to next position
i=i+1
if count==1000: #if is 1000th position
print i-1," is 1000th prime." #print prime
解决您的问题:
def is_prime(n):
if n == 2 or n == 3: return True
if n < 2 or n%2 == 0: return False
if n < 9: return True
if n%3 == 0: return False
r = int(n**0.5)
f = 5
while f <= r:
if n%f == 0: return False
if n%(f+2) == 0: return False
f +=6
return True
count=5 #Nth prime number
i=10 #number to be checked
while (count!=8): #until its not 1000th
if not is_prime(i): #to check non prime
pass #next number initialized
else: #for prime
count=count+1 #move to next position
i=i+1
if count==8: #if is 1000th position
print i-1," is 1000th prime." #print prime
函数is_prime(n)来自isPrime Function for Python Language
答案 2 :(得分:0)
i
。