题目
设一个等差数列,首元素为367,公差为186, 现在要求找出属于该等差数列中的第151个素数并输出。
编辑
在此编辑中,使用的常用方法是建立一个数组,将数组中的每一个数字对从2开始的数字进行取模,一直取到自己本身这个数,中间取尽break,没有break就可以得到素数,具体的程序如下:
def num(a):
for i in range(2,a):
if(i % a) == 0:
return False
break
if i == a - 1:
return True
list = []
for n in range(367,100000,186):
if num(n) == True:
list.append(n)
list[150]
但是,这样的程序放在sublime上面跑的耗时会比较长,每一个数字都要从2开始跑,这个问题也可以用另一个python程序进行编程。具体程序如下:
from math import sqrt
count=0
start=367
step=186 #以上3行与for n in range(367,100000,186)两者是否等价?
while 1: #符合条件的第一个素数
parame=int(sqrt(start)) #将start开平方并去整
for i in range(2,parame+1):
if start % i == 0:
break #不是素数
if i==parame: #判断这个start是素数
count+=1 #切到下一个符合条件的start
if count==151:
print(start)
break
start=start+step
在这个python程序中,引用了sqrt这个程序语言,开平方。先把将要判断的数进行开平方并去整再加上一个1(在这里我们记这个数为parame+1),将得到的这个数进行从2开始取模。其实这样就可以判断是不是素数了,可以把parame+1以上的数认为是重复之前的取模(可以理解但是不知道怎么解释,百老师也提供了这个方法,自己脑补。。。)