1003. Prime Palindromes

来源:互联网 发布:淘宝客服服务回复 编辑:程序博客网 时间:2024/05/17 18:40

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

#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;        }    }}
0 0
原创粉丝点击