[英]Finding prime numbers < n
我正在研究项目Euler,问题3。问题是:
“ 13195的素数是5、7、13和29。什么是600851475143的最大素数?”
在回答这个问题时,我正在分解任务以首先找到所有<x的质数(反之)。 为什么以下代码似乎不起作用,我不确定这是逻辑还是运算符的错误使用。
#A function to find prime numbers under n
def find_prime(n):
for i in reversed(xrange(2, n)):
if (n % i) != 0:
print i
find_prime(n)
在测试中,我还构建了一个质数检查器以供娱乐,因此我进行了一些测试。
def prime_checker(n):
if n > 2:
for i in range (2,n):
if (n % i) == 0:
print "%s is not a prime number" % (n)
break
else:
print "%s is a prime number" % (n)
在继续进行下一步以解决问题之前,谁能帮助我了解find_prime()函数的问题?
在开始编码之前,也许您应该阅读一下所处理的内容。 素数已得到充分研究。 首先,您不需要所有素数<x。 其次,每次找到除数时,都可以将其除以该除数,从而可以解决一个较小的问题。 最后,剩下的号码就是您要寻找的号码。 现在,除了2之外,没有其他偶数是质数,所以xrange(3, n, 2)
。 搜索更多内容,您将找到不需要宇宙时间即可解决的解决方案。
您无法确定数字是否为质数,直到在没有找到任何除数的情况下将其一直循环为止。 您报告一个数字是质数,只要找到一个不除数的数字即可,但是它仍然可以被更高的数字整除。 您的代码将说所有奇数均为素数,因为它们不是2
的倍数。
同样,也不必一直到您范围内的n
。 数字的所有因子均不能大于数字的平方根。
def prime_checker(n):
if n > 2:
for i in range (2, int(n ** .5)+1):
if (n % i) == 0:
print "%s is not a prime number" % (n)
return false
print "%s is a prime number" % (n)
return true
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.