楼主有些方面写复杂了,
import math
def isPrime(n):
if n<3 : return True
for i in range(2,int(math.sqrt(n))+1):
if n % i == 0 : return False
return True
c=n=0
while(c<=1000):
if isPrime(n):
print(c,'=>',n)
c+=1
n+=1
用天真法,测1000以内质数也只是5秒内的吧。
======
用随机测法,1000以内的数,k在5以内,每个数只要测5次,就能基本测出来吧
import random
def isPrime2(n,k):
if n<3 : return True
for i in range(k):
a=random.randint(1,n-1)
if pow(a,n-1,n)!=1: return False
return True
测10023
isPrime2(10023,5)
有个希腊的数学家的一个算法可以简化求素数的方法,摆渡一下吧,说不定可以帮到你。
你可以百度一下“筛法求素数”。
我的答案 供参考:
def findPrim(n):
import math
primset=[2]
prim=2
x=0
while x
for i in primset:
if i>int(math.sqrt(prim)) and i!=2:
break
if prim%i==0:
f=False
if f==True:
primset.append(prim)
x=x+1
prim=prim+1
return primset
n=int(raw_input('Type the nth Prime wanted:'))
a=findPrim(n)
print(a)
从2开始 把质数存起来 只检测 不大于int(sqrt(n))的质数 是否被整除 就可以了