嗜血魂K

导航

1.5 Prime Palindromes

沙茶表示先是写了个生成素数的,90+M...........即使加入一个只存奇数的小优化,依然挂.

不过写了这个表示会筛法打素数表了 - - 其实自己完全可以估算出需要的内存是10^8/1024/1024 即使优化/2,40+M依然会挂- -  不过noip就不会了  - - 一般256M~

View Code
#include<iostream>
#include<cstdio>
#include<cmath>
#include<cstring>
using namespace std;
unsigned long maxn;
void getprimelist()
{
unsigned long stop = sqrt(maxn*2)+1;
for(unsigned long i = 3; i <= stop; i++)
{
if(i&1 && isprime[(i-3)>>1])
{
for(unsigned long j = 2*i; j < maxn; j+=i)
if(j&1)
isprime[(j-3)>>1] = false;
}
}
}
bool ispal(unsigned long pal)
{
char str[10];
sprintf(str, "%lu", pal);
for(int len = strlen(str), i =0, t = len/2 + 1; i < t; i++)
if(str[i] != str[len-i-1]) return false;
return true;
}


int main()
{
freopen("pprime.in", "r", stdin);
// freopen("pprime.out", "w", stdout);
unsigned long a, b;
cin >> a >> b;
maxn = b >> 1;
bool static isprime[maxn+1];
memset(isprime, 1, maxn);
getprimelist();
//for(int i = 0; i <= 100; i++) if(isprime[i]) cout << (i<<1)+3 << endl;
for(unsigned long i = a; i <= b; i++)
if(i&1 && isprime[(i-3)>>1] && ispal(i))
cout << i << endl;
return 0;
}


接着准备用别人的思路,生成回文数再判断质数(O(sqrt(n))

回文数个数应该能做个大致分析:

一位:10个都是

二位:9个

三位:10*9

四位:9*10

五位:10*10*9

只是大致吧...数量级很小呢  所以才没有TLE吧  估计:19999 额...不用开数组嘎..

下面想法子写- -

posted on 2012-01-29 13:56  嗜血魂K  阅读(171)  评论(0编辑  收藏  举报