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