Python素数列表错了吗?

时间:2012-05-19 03:17:35

标签: python list primes

我尝试了几种不同的方法来获得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

3 个答案:

答案 0 :(得分:2)

我相信你的主要筛选是错误的。尝试使用isPrime函数,该函数将每个较小的素数转换为mod。如果其中任何一个为0,那么该数字是复合的(不是素数)。据我所知,没有单一的比较可以告诉你一个数字是否为素数,因为你的isPrime函数假设。

答案 1 :(得分:2)

这是项目欧拉?这对我来说似乎很熟悉。

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

Simple Prime Generator in Python

这就是我猜的答案。

答案 2 :(得分: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