您的位置:首页 > 其它

USACO 1.5 Prime Palindromes(枚举)

2012-11-02 16:53 337 查看
本来想筛选素数的。。。交了之后发现复杂度也太高了。。。可耻的看了一下hint,然后就各种for枚举了每一位了。.。

/*
ID: cuizhe
LANG: C++
TASK: pprime
*/
#include <cstdio>
#include <cstring>
#include <cmath>
#include <algorithm>
using namespace std;
#define N 1000001
bool p
;
int prim[100000],num;
int judge(int x)
{
int i;
for(i = 1;i <= num-1;i ++)
{
if(prim[i] > x)
break;
if(x%prim[i] == 0)
return 0;
}
return 1;
}
int main()
{
int i,j,k,u;
long long t,a,b;
freopen("pprime.in","r",stdin);
freopen("pprime.out","w",stdout);
scanf("%lld%lld",&a,&b);
for(i = 2; i <= N; i ++)
{
if(!p[i])
{
for(j = i+i; j <= N; j += i)
{
p[j] = 1;
}
}
}
num = 1;
for(i = 2;i <= N;i ++)
{
if(!p[i])
prim[num++] = i;
}
for(i = 1;i <= 9;i += 2)//一位
{
if(!p[i]&&i >= a&&i <= b)
printf("%d\n",i);
}
for(i = 1;i <= 9;i += 2)//两位
{
if(!p[i*10+i]&&i*10+i>=a&&i*10+i<=b)
printf("%d\n",i*10+i);
}
for(i = 1;i <= 9;i += 2)//三位
{
for(j = 0;j <= 9;j ++)
{
if(!p[i*100+j*10+i]&&i*100+j*10+i>=a&&i*100+j*10+i<=b)
printf("%d\n",i*100+j*10+i);
}
}
for(i = 1;i <= 9;i += 2)//四位
{
for(j = 0;j <= 9;j ++)
{
if(!p[i*1000+j*100+10*j+i]&&i*1000+j*100+10*j+i>=a&&i*1000+j*100+10*j+i<=b)
printf("%d\n",i*100+j*100+10*j+i);
}
}
for(i = 1;i <= 9;i += 2)//五位
{
for(j = 0;j <= 9;j ++)
{
for(k = 0;k <= 9;k ++)
{
t = i*10000+i+1000*j+10*j+k*100;
if(!p[t]&&t>=a&&t<=b)
printf("%lld\n",t);
}
}
}
for(i = 1;i <= 9;i += 2)//六位
{
for(j = 0;j <= 9;j ++)
{
for(k = 0;k <= 9;k ++)
{
t = i*100000+i+10000*j+10*j+k*1000+k*100;
if(!p[t]&&t >= a&&t <= b)
printf("%lld\n",t);
}
}
}
for(i = 1;i <= 9;i += 2)//七位
{
for(j = 0;j <= 9;j ++)
{
for(k = 0;k <= 9;k ++)
{
for(u = 0;u <= 9;u ++)
{
t = 1000000*i+i+100000*j+10*j+10000*k+k*100+1000*u;
if(judge(t)&&t >= a&&t <= b)
printf("%lld\n",t);
}
}
}
}
for(i = 1;i <= 9;i += 2)//八位
{
for(j = 0;j <= 9;j ++)
{
for(k = 0;k <= 9;k ++)
{
for(u = 0;u <= 9;u ++)
{
t = 10000000*i+i+1000000*j+10*j+100000*k+k*100+10000*u+1000*u;
if(judge(t)&&t >= a&&t <= b)
printf("%lld\n",t);
}
}
}
}
return 0;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: