蓝桥杯真题练习

[蓝桥杯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))

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值