USACO 1.5 Prime Palindromes

dfs生成所有的奇数长度回环数,然后判断其是否为质数即可。
偶数长度的回环数都是11的倍数,只有11是质数,直接添加即可。
因为abba=a00a+bb0=a*1001+b0*1100=(a*99+b0)*11.其他可类推


#include <iostream>
#include 
<fstream>
#include 
<cmath>
#include 
<vector>

using namespace std;

ifstream fin(
"pprime.in");
ofstream fout(
"pprime.out");

#ifdef _DEBUG
#define out cout
#define in cin
#else
#define out fout
#define in fin
#endif

bool is_prime(int num);

vector
<int>result;
int a,b;

void dfs(int num,int len)
{
    
if(len>8)
        
return;

    
if(is_prime(num))
       result.push_back(num);

    
int factor = 1;

    
for(int i=0;i<len;++i)
        factor
*=10;

    
for(int i=0;i<10;++i){
        
//左右各加一个i
        int temp = factor*i;
        temp
+=num;
        temp
*=10
        temp
+=i;
        dfs(temp,len
+2);
    }
}

void solve()
{
    
in>>a>>b;
    
    
for(int i=0;i<10;++i)
        dfs(i,
1);

    
//11直接加了
    result.push_back(11);

    sort(result.begin(),result.end());

    
for(int i=0;i<result.size();++i)
        
if(result[i]>=a&&result[i]<=b)
        
out<<result[i]<<endl;
}

// num>=2
bool is_prime(int num)
{
    
if(num==2return true;
    
    
int root = (int) sqrt(num);

    
for(int i=2;i<=root;++i)
        
if(num%i==0)
            
return false;

    
return true;
}


int main(int argc,char *argv[])
{
  solve();
  
return 0;
}



posted on 2009-06-12 23:56 YZY 阅读(1235) 评论(0)  编辑 收藏 引用 所属分类: AlgorithmUSACO


只有注册用户登录后才能发表评论。
网站导航: 博客园   IT新闻   BlogJava   知识库   博问   管理


导航

<2009年6月>
31123456
78910111213
14151617181920
21222324252627
2829301234
567891011

统计

常用链接

留言簿(2)

随笔分类

随笔档案

搜索

积分与排名

最新评论

阅读排行榜