您的位置:首页 > 其它

usaco Prime Palindromes

2016-11-02 18:55 246 查看
新技能get,可以这样遍历回文数,的确厉害。注意剪枝不然超时。

/*
ID: jinbo wu
LANG:C++
TASK: pprime
*/
#include <stdio.h>
#include <stdlib.h>
#include <math.h>
int Prime(int n)
{
int i;
double k;
k=sqrt(n);
for(i=2;i<=k;i++)
{
if (n%i==0)
{
return 0;
}
}
return 1;
}

int main()
{
freopen("pprime.in","r",stdin);
freopen("pprime.out","w",stdout);

int a,b,c,d,e,f,g,y;
scanf("%d %d",&f,&g);
for (a=5;a<=7;a++)
{
if(a<f)
continue;
if(a>g)
return 0;
if (Prime(a)==1&&a>=f&&a<=g)
{
printf("%d\n",a);
}
}
for (a=1;a<=9;a+=2)
{
y=11*a;
if(y<f)
continue;
if(y>g)
return 0;
if(Prime(y)==1&&y>=f&&y<=g)
printf("%d\n",y);
}
for (a=1;a<=9;a+=2)
{
for(b=0;b<=9;b++)
{
y=a*101+10*b;
if(y<f)
continue;
if(y>g)
return 0;
if(Prime(y)==1&&y>=f&&y<=g)
printf("%d\n",y);
}
}
for (a=1;a<=9;a+=2)
{
for(b=0;b<=9;b++)
{
for (c=0;c<=9;c++)
{
y=10001*a+1010*b+100*c;
if(y<f)
continue;
if(y>g)
return 0;
if (Prime(y)==1&&y>=f&&y<=g)
printf("%d\n",y);
}
}
}
for (a=1;a<=9;a+=2)
{
for (b=0;b<=9;b++)
{
for (c=0;c<=9;c++)
{
for (d=0;d<=9;d++)
{
y=1000001*a+100010*b+10100*c+1000*d;
if(y<f)
continue;
if(y>g)
return 0;
if (Prime(y)==1&&y>=f&&y<=g)
printf("%d\n",y);
}
}
}
}
for (a=1;a<=9;a+=2)
{
for (b=0;b<=9;b++)
{
for (c=0;c<=9;c++)
{
for (d=0;d<=9;d++)
{
for (e=0;e<=9;e++)
{
y=100000001*a+10000010*b+1000100*c+101000*d+10000*e;
if(y<f)
continue;
if(y>g)
return 0;
if (Prime(y)==1&&y>=f&&y<=g)
printf("%d\n",y);
}
}
}
}
}
return 0;
}

内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: