回文质数 Prime Palindromes

P1217 (USACO1.5)回文质数 Prime Palindromes

  1. 偶数位数回文数(除11)不是质数
    所以只要运行到 1e7-1 (1e9不是回文数,只用到最大的7位数)
  2. 偶数肯定不是质数
解释一下1,偶数位数回文数都可以写成有偶数个0的 100...001 * n 相加,而 100...001 = 9...991 * 11,故一定不是偶数

不过这道题我最终还是打表了 羞愧捂脸,因为我就是想用python加线性素数筛写,但是不是超时就是爆内存,我还是太弱了嘤嘤嘤~

附上糟糕的TLE代码,有时间用C++试试

def ifh(i):
    i = str(i)  
    if i==i[::-1] :
        return 1
    return 0

def prime(a,b):
    j = 0
    bl[0] = bl[1] = 1
    for i in range(2,b+1):
        if bl[i] != 1 :
            pr[j] = i
            j += 1
            if a<=i :
                if ifh(i) :
                   print(i)  
        for k in range(j) :
            if i*pr[k]>=b :
                break
            bl[pr[k]*i] = 1
            if i%pr[k]==0 :
                break

def add(a,b):
    for x in range(a,b,2) :
        i = f = 0
        while pr[i]**2<=x:
            if x%pr[i] :
                i += 1
            else :
                f = 1
                break
        if f==0 :
            if ifh(x):
                print(x)

a,b = map(int,input().split())
c = b
if b>100000 :
    c = 100000
    if b>10000000 :
        b = 10000000-1
   
pr = [0 for i in range(c+5)]
bl = [0 for i in range(c+5)]
prime(a,c)
if b>1000000 :
    if a<1000000:
        a = 1000001
    elif a&1==0 :
        a += 1     
    add(a,b+1)

分成两段是因为 python 开1e8的数组会全MLE,TLE的话还能对三个,喏
回文质数 Prime Palindromes_第1张图片
卑微,下次再也不想干这种浪费时间的事了,猛男落泪

你可能感兴趣的:(Python初学,ACM&算法)