[英]Python prime number code
我正在尝试生成3之后的第一个“ n”素数。问题是我不知道我的代码出了什么问题,如果有人可以帮助我解决逻辑问题,我将不胜感激。
a = 3
b = 2
# n = number of prime numbers to be printed.
n = 1000
for a in range(a, n): #This i the range of all numbers to be tested
if a % 2 == 0: #Only odd numbers are prime(except 2) so eliminate the evens
print "."
else:
for b in range(b, a): #This is to test the odd numbers
if (a % b == 0): #I am dividing a by all numbers smaller than it to test
print a, "is not prime"
break
任何有关帮助我解决此问题的指导将不胜感激。 我通读了有关该问题的旧文章,但想知道我自己的逻辑在哪些地方存在缺陷。
谢谢。
我认为您在这里遇到几个问题。
关于其他,您的缩进是错误的。
另外,尝试更改循环中使用的变量名称,以不使用脚本顶部定义的a和b,您应该会发现有所不同。
它应该是 :
a = 3
b = 2
n = 1000
for ax in range(a, n):
if ax % 2 == 0:
print "."
else:
for bx in range(b, ax):
if (ax % bx == 0):
print ax, "is not prime"
break
休息后添加其他内容也可以帮助您调试此类问题。
首先,您应该检查缩进。 我想这是你的代码:
for a in range(a, n): #This i the range of all numbers to be tested
if a % 2 == 0: #Only odd numbers are prime(except 2) so eliminate the evens
print "."
else:
for b in range(b, a): #This is to test the odd numbers
if (a % b == 0): #I am dividing a by all numbers smaller than it to test
print a, "is not prime"
break
这段代码对我来说很有意义。 您还需要修复第一个打印件。
if a % 2 == 0: #Only odd numbers are prime(except 2) so eliminate the evens
print a, "is not prime"
现在让我们看一下逻辑。 如果a是偶数,则它不是素数,您不能以a = 2开头。 然后,如果它是奇数,请检查是否有小于它的整数可以除。
有更好的算法可以做到这一点。 检查一下 。
这是一些代码:
import math
import itertools
def isprime(m):
return not any((m % d == 0 for d in range(2, int(math.sqrt(m)+1))))
def genprimes(n):
i = 0
for m in itertools.count(2): # 2, 3, 4, ...
if i >= n:
return
if isprime(m):
yield m
i += 1
跑步
list(genprimes(10))
产生
[2, 3, 5, 7, 11, 13, 17, 19, 23, 29]
n = 1000
primes = []
nonprime = []
def prime(nonprime, primes, n):
nonprime.append(0)
nonprime.append(1)
nonprime.append(2)
primes.append(3)
for number in range(3, n):
if (number % 2 == 0):
nonprime.append(number)
else:
counter = 3
while counter <= number:
if (counter != number) and (number % counter == 0):
nonprime.append(number)
break
elif (number % counter == 1) and (counter >= number/2):
primes.append(number)
break
else:
counter += 1
print "primes are : ", primes
print "nonprimes are : ", nonprime
if __name__ == "__main__":
prime(nonprime, primes, n)
显然不是最有效的。 希望它可以有所帮助。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.