1. 程式人生 > >素數迴文(hdu1431)

素數迴文(hdu1431)

#include<stdio.h>
#include<algorithm>
#include<cmath>
#include<iostream>
using namespace std;
bool test(int x)
{
 for(int i=2;i<=sqrt(x);i++)
         if(x%i==0) return 0;
 return 1;
}
int main()
{
   int  n,m,j,k,l=0,flag,a,b,s[20000]={0};///打表,計算迴文所以迴文素數並儲存排序.
    for(int i=1;i<=10000;i++)             ///一定要先計算迴文再計算素數
    {
     j=1,a=b=k=i,flag=0;
     for(int j=0;k>0;k/=10,j++)
     {
      a=a*10+k%10;
      if(j>0)
      b=b*10+k%10;///b比a慢一步,少一位,當i=123時候,a=123321,b=12321.
     }
     if(a&1)///a與b的第一位相同,所以只要a求是否為偶數,偶數就不用看是否為素數了
     {
      if(test(a))
        s[l++]=a;
      if(test(b))
        s[l++]=b;
     }
    }
    sort(s,s+l);///排序在能順序輸出

 while(scanf("%d%d",&n,&m)!=EOF)
   {
    for(int i=0;i<l;i++)
     if(s[i]>=n&&s[i]<=m)
       cout<<s[i]<<endl;
    printf("\n");
   }
   return 0;
}