USACO1.52 Prime Palindromes

素数回文

先产生所有范围内的回文数,再在范围内找出所有 的素数;

嘿嘿,判断素数的方法就太牛逼了,好难理解

/*
ID: nanke691
LANG: C++
TASK: pprime
*/
#include<iostream>
#include<fstream>
#include<string.h>
#include<stdlib.h>
#include<math.h>
using namespace std;
long long b[10000]={5,7,11};
int p[8]={4,2,4,2,4,6,2,6};
int prime(int n)//判断素数
{
    int i=7,j,q;
    if(n==1)return 0;
    if(n==2||n==5||n==3)return 1;
    if(n%2==0||n%3==0||n%5==0)return 0;
    q=(int)sqrt((double)n);
    for(;i<=q;){
        for(j=0;j<8;j++){
            if(n%i==0)return 0;
            i+=p[j];
        }
        if(n%i==0)return 0;
    }
    return 1;
}
int creat()
{
    int i,j,k,l,m,count=3;
    for(i=1;i<=9;i+=2)
        for(j=0;j<=9;j++)
        b[count++]=100*i+10*j+i;
    for(i=1;i<=9;i+=2)
        for(j=0;j<=9;j++)
            for(k=0;k<=9;k++)
              b[count++]=10000*i+1000*j+k*100+j*10+i;
        for(i=1;i<=9;i+=2)
         for(j=0;j<=9;j++)
            for(k=0;k<=9;k++)
                for(l=0;l<=9;l++)
                  b[count++]=1000000*i+100000*j+k*10000+l*1000+k*100+j*10+i;
        return count-1;
}
int main()
{
    long long   a,c,i,temp,n;
    n=creat();
	freopen("pprime.in","r",stdin);
	freopen("pprime.out","w",stdout);
    scanf("%lld %lld",&a,&c);
     if(a>c)
       {
           temp=a;a=c;c=temp;
       }
     for(i=0;i<n;i++)
        if(a<=b[i])
          {
              if(c>=b[i])
               {
                 if(prime(b[i]))
                    printf("%lld\n",b[i]);
                }
                    else break;
           }
    return 0;
}
原文地址:https://www.cnblogs.com/nanke/p/2217809.html