寻找素数< ñ

时间:2016-04-14 21:12:43

标签: python scripting primes

我正在研究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()函数中做错了什么吗?

2 个答案:

答案 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