我正在研究Project 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()函数中做错了什么吗?
答案 0 :(得分:3)
在开始编码之前,也许你应该读一下你正在处理的内容。 Primes得到很好的研究。首先,你不需要所有素数< X。其次,每当你找到一个除数时,你可以将数字除以该数,并在你的手上有一个较小的问题。最后,剩下的数字将是您正在寻找的。现在,除了2,没有其他偶数是素数,所以xrange(3, n, 2)
。搜索更多内容,您将找到一个不需要宇宙时间完成的解决方案。
答案 1 :(得分: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