Python 寻找素数<;N

Python 寻找素数<;N,python,scripting,primes,Python,Scripting,Primes,我正在研究欧拉计划,问题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 (

我正在研究欧拉计划,问题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
的倍数

此外,在您的范围内,不必一直到
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

你不能判断一个数是否是素数,除非你在循环中找到了所有的因子。当你发现一个数字没有被除数,但它仍然可以被更高的数除数时,你就报告说一个数字是素数。你的代码会说所有奇数都是素数,因为它们不是
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

在你开始编码之前,也许你应该读一读你正在处理的事情。素数研究得很好。首先,你不需要所有的素数xrange(3,n,2)。再多搜索一些,你就会找到一个解决方案,它不需要花很多时间来完成。

在你开始编码之前,也许你应该读一读你正在处理的事情。素数研究得很好。首先,你不需要所有的素数xrange(3,n,2)。再多搜索一些,你就会找到一个不需要宇宙时间就能完成的解决方案。

你报告说一个数字是素数,只是因为它不能被一个数字整除。但是它必须不能被任何数字整除。哎呀,我是说“如果n不能被I整除,打印I”你不想找到所有小于n的素数。大多数thm都不是n的一个因子。你想在你检查的最后一个素数之后找到“下一个”素数因子(从2,3,5,7开始,…)。当您找到一个是N的因子(比如P)时,您就可以使用N1=N/P来查找更多的因子,从而缩小要搜索的范围。您的样本号有因子7183914716857。有超过5000万个素数小于1E9,因此您的数字将有更多的因子小于1E9。但是只找到6857的882个素数就足够了。话虽如此,你可能需要考虑到它是一个小素数和一个非常大的素数的乘积。你应该查一下地图;至少你可以在到达后停下来√600851475143或775146。@JonathanLeffler只有233个素数你之所以报告一个数是素数,是因为它不能被一个数整除。但是它必须不能被任何数字整除。哎呀,我是说“如果n不能被I整除,打印I”你不想找到所有小于n的素数。大多数thm都不是n的一个因子。你想在你检查的最后一个素数之后找到“下一个”素数因子(从2,3,5,7开始,…)。当您找到一个是N的因子(比如P)时,您就可以使用N1=N/P来查找更多的因子,从而缩小要搜索的范围。您的样本号有因子7183914716857。有超过5000万个素数小于1E9,因此您的数字将有更多的因子小于1E9。但是只找到6857的882个素数就足够了。话虽如此,你可能需要考虑到它是一个小素数和一个非常大的素数的乘积。你应该查一下地图;至少你可以在到达后停下来√600851475143或775146@JonathanLeffler只有233个质数。我在这里的意图是先解决这个问题,然后再提出最佳解决方案。你的观点对我来说很有意义。好吧,你如何找到一个大的连续素数序列?不要单独检查每一个。实施Aritothene的Seeve。维基百科上对此有一个很好的解释。@mutantChickenHer0在《分而治之》中,不仅有《分而治之》,而且《征服》也很重要。在这里,当这些单独的函数组合在一起时,会有很多协同作用,从而有很多机会消除重复计算(比如,不需要通过构造来证明什么是正确的,等等)。e、 g.看,或涉水通过。确认。我在这里的意图是先解决这个问题,然后再提出最佳解决方案。你的观点对我来说很有意义。好吧,你如何找到一个大的连续素数序列?不要单独检查每一个。实施Aritothene的Seeve。维基百科上对此有一个很好的解释。@mutantChickenHer0在《分而治之》中,不仅有《分而治之》,而且《征服》也很重要。在这里,当这些单独的功能结合在一起时,会产生很多协同效应,从而带来很多机会