Hoj 1004 Prime Palindromes

来源:互联网 发布:淘宝假冒伪劣案例 编辑:程序博客网 时间:2024/04/29 09:54

本题练习穷举。

题目链接:http://acm.hit.edu.cn/hoj/problem/view?id=1004

本题以前做过,之所以记录本题,是因为看到一种生成回文数的有效方法,套用此模板可以快速生成1 - 10^9范围内的回文数表。虽然看似繁杂,但是却非常有效。

本题是求一定范围内的所有回文素数。

#include <iostream>#include <stdio.h>#include <string.h>#include <math.h>#include <algorithm>using namespace std;int main(){#ifndef ONLINE_JUDGE    freopen("in.txt","r",stdin);#endif    int a,b;    scanf("%d %d",&a,&b);    int Palind[110000],pnum=0;    int n,m,k,p,q;    //求所有的回文数    for(n=1; n<=9; n++)        Palind[pnum++]=n;    for(n=1; n<=9; n++)        Palind[pnum++]=11*n;    for(n=1; n<=9; n++)        for(m=0; m<=9; m++)            Palind[pnum++]=101*n+10*m;    for(n=1; n<=9; n++)        for(m=0; m<=9; m++)            Palind[pnum++]=1001*n+110*m;    for(n=1; n<=9; n++)        for(m=0; m<=9; m++)            for(k=0; k<=9; k++)                Palind[pnum++]=10001*n+1010*m+100*k;    for(n=1; n<=9; n++)        for(m=0; m<=9; m++)            for(k=0; k<=9; k++)                Palind[pnum++]=100001*n+10010*m+1100*k;    for(n=1; n<=9; n++)        for(m=0; m<=9; m++)            for(k=0; k<=9; k++)                for(p=0; p<=9; p++)                    Palind[pnum++]=1000001*n+100010*m+10100*k+1000*p;    for(n=1; n<=9; n++)        for(m=0; m<=9; m++)            for(k=0; k<=9; k++)                for(p=0; p<=9; p++)                    Palind[pnum++]=10000001*n+1000010*m+100100*k+11000*p;    for(n=1; n<=9; n++)        for(m=0; m<=9; m++)            for(k=0; k<=9; k++)                for(p=0; p<=9; p++)                    for(q=0; q<=9; q++)                        Palind[pnum++]=100000001*n+10000010*m+1000100*k+101000*p+10000*q;    //判断素数    for(int i=0;i<pnum;i++)    {        if(Palind[i]>b)        {            break;        }        int q = sqrt(Palind[i]) + 1;        int flag = 0;        for(int j = 2;j<q;j++)        {            if(Palind[i]%j == 0)            {                flag = 1;                break;            }        }        if(flag == 0 && Palind[i]>=a)        {            printf("%d\n",Palind[i]);        }    }    return 0;}