繁体   English   中英

查找素数<n

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM