USACO1.52 Prime Palindromes
素数回文
先产生所有范围内的回文数,再在范围内找出所有 的素数;
嘿嘿,判断素数的方法就太牛逼了,好难理解
/*
ID: nanke691
LANG: C++
TASK: pprime
*/
#include<iostream>
#include<fstream>
#include<string.h>
#include<stdlib.h>
#include<math.h>
using namespace std;
long long b[10000]={5,7,11};
int p[8]={4,2,4,2,4,6,2,6};
int prime(int n)//判断素数
{
int i=7,j,q;
if(n==1)return 0;
if(n==2||n==5||n==3)return 1;
if(n%2==0||n%3==0||n%5==0)return 0;
q=(int)sqrt((double)n);
for(;i<=q;){
for(j=0;j<8;j++){
if(n%i==0)return 0;
i+=p[j];
}
if(n%i==0)return 0;
}
return 1;
}
int creat()
{
int i,j,k,l,m,count=3;
for(i=1;i<=9;i+=2)
for(j=0;j<=9;j++)
b[count++]=100*i+10*j+i;
for(i=1;i<=9;i+=2)
for(j=0;j<=9;j++)
for(k=0;k<=9;k++)
b[count++]=10000*i+1000*j+k*100+j*10+i;
for(i=1;i<=9;i+=2)
for(j=0;j<=9;j++)
for(k=0;k<=9;k++)
for(l=0;l<=9;l++)
b[count++]=1000000*i+100000*j+k*10000+l*1000+k*100+j*10+i;
return count-1;
}
int main()
{
long long a,c,i,temp,n;
n=creat();
freopen("pprime.in","r",stdin);
freopen("pprime.out","w",stdout);
scanf("%lld %lld",&a,&c);
if(a>c)
{
temp=a;a=c;c=temp;
}
for(i=0;i<n;i++)
if(a<=b[i])
{
if(c>=b[i])
{
if(prime(b[i]))
printf("%lld\n",b[i]);
}
else break;
}
return 0;
}

浙公网安备 33010602011771号