[蓝桥杯2017初赛]等差素数列
朴素做法 枚举首项和公差
#未使用素数筛
a=[0 for i in range(1000000+10)]
def check(n):
i=2
while i<=n**0.5:
if n%i==0:
return 0
i+=1
return 1
def init():
for i in range(2,100000):
if check(i):
a[i]=1
def solve():
for d in range(1,1000):#公差
for i in range(2,100000):#首项
num=0
while num<10:
if not a[i+num*d]:
break
num+=1
if num==10:
return d
init()
print("%d"%(solve()))
质数筛模板(埃氏筛)
#未使用素数筛
a=[0 for i in range(20000+10)]
prime=[0 for i in range(20000+10)]
def init2():
k=0
n=10000
a[0]=1
a[1]=1
for i in range(10000):
if a[i]:
continue
j=i
while j*i<n: #质数打表,质数为0,不是质数为1
a[i*j]=1
j+=1
prime[k]=i
k+=1
def solve():
for i in range(10000):
kk=prime[i]#质数 #首项
for k in range(1,1000):#公差
num=0
while num<10:
if a[kk+num*k]:
break
num+=1
if num==10:
return k
return 0
init2()
bb=solve()
print("%d"%(bb))