1003. Prime Palindromes

在判断质数的地方做文章,利用了一个定理:若一个数是质数其必有小于等于其平方根的质因子。我们知道所有的数都是可以通过质因数分解得到,一个合数必然有质因数,若质因数都大于其平方根,这显然是荒谬的。
该方法都是将结果储存在了一个较小的空间的数组中,因为满足其条件的数并不多,以后只要比较其上下界就可以得到答案了
方法一对上下界做了精确的估计,利用了一个定理:

#include <stdio.h>
#include <cstring>
int const maxn =9989899;
int isnp[maxn];
int ans[3000];
void inipri() {
    isnp[1]=1;
    int i=2;
    for (int j=i*i;j<maxn;j=j+i) isnp[j]=1; 
    for (int i=3;i<3163;i++) {
         if (isnp[i]) continue;
        for (int j=i*i;j<maxn;j=j+i) {
            isnp[j]=1;
        }
    }
}

bool ispa(int a) {
    int tmp = a;
    int b = 0;
    while (tmp) {
        int k = tmp%10;
        tmp = tmp / 10;
        b = b*10 + k;
    }
    return b==a;
}


int main() {
    int lo,hi;
    inipri();
    int k =0;
    for (int i=1;i<=maxn;i++) {
        if (!isnp[i]&&ispa(i)) {
            ans[k++]=i;
        }
    }
    while (scanf("%d%d",&lo,&hi)!=EOF&&(lo!=0||hi!=0)) {
        for (int i=0;i<k;i++) {
            if (ans[i]<lo) continue;
            if (ans[i]<=hi) printf("%d\n",ans[i]);
            if (ans[i]>hi) break;
        }
    }
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值