素數迴文(hdu1431)
阿新 • • 發佈:2019-02-02
#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; }