3

我尝试了几种不同的方法来获得 10001 素数。

def isPrime(value):
  if ((2**value)-2)%value==0:
    return True

def nthPrime(n):
  count = 0
  value = 1
  while count < n:
    value += 1
    if isPrime(value):
      count += 1
  return value

当 10001 是参数时,它返回 103903。当我期待 104743 时。

我试过了:

primes = []
for i in range(2,105000):
  if ((2**i) - 2) % i == 0:
    primes.append(i)

print primes[10001] ---> 103903
4

3 回答 3

2

我相信你的初筛是错的。尝试使用一个 isPrime 函数,该函数采用该数字对每个较小的素数进行模数。如果其中任何一个为 0,则该数字是合数(不是素数)。据我所知,没有单一的比较可以告诉你一个数字是否是素数,就像你的 isPrime 函数假设的那样。

于 2012-05-19T03:22:14.330 回答
2

这是欧拉计划吗?这对我来说似乎很熟悉。

你的 isPrime 函数是错误的,就像 TEOUltimus 说的那样,没有一种方法可以判断一个数字是否是素数。

Python中的简单素数生成器

我猜这几乎回答了你的问题。

于 2012-05-19T03:26:04.093 回答
2

您可以创建一个函数来生成素数,这可能会很慢,但它会起作用。

这是我这样做的功能:

def PrimesSieve(limit):
    np=set()
    p=[2]
    for i in xrange(1,limit+1,2):
            if i == 1: continue
            if {i} & np: continue
            beg=2 if i % 2 == 0 else 0
            for j in xrange(beg,int(limit)+1,i):
                    np.add(j)
            p.append(i)
    return p
于 2015-10-02T11:13:19.210 回答