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