回文质数(洛谷-P1217)
                                                            生活随笔
收集整理的這篇文章主要介紹了
                                回文质数(洛谷-P1217)
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.                        
                                題目描述
因為151既是一個質數又是一個回文數(從左到右和從右到左是看一樣的),所以 151 是回文質數。
寫一個程序來找出范圍[a,b](5 <= a < b <= 100,000,000)( 一億)間的所有回文質數;
輸入輸出格式
輸入格式:
?1 行: 二個整數 a 和 b .
輸出格式:
輸出一個回文質數的列表,一行一個。
輸入輸出樣例
輸入樣例#1:?
5 500
輸出樣例#1:?
5
 7
 11
 101
 131
 151
 181
 191
 313
 353
 373
 383
思路:要求 1 億以內的回文質數,7 位就足以將回文數構造出來,然后再判斷素數即可
源代碼?
#include<iostream> #include<cmath> using namespace std;int judge_prime(int n)//判斷是否是素數 {int i;if(n%2==0) return 0;for(i=3;i<sqrt(n)+1;i+=2)if(n%i==0)return 0; return 1; }int lengh(int n)//判斷區間長度 {int len=1;while(n>9){n/=10;len++;}return len; } int main() {int a,b;int len_a,len_b;int m,n,p,q;int number;int judge_prime(int n);int lengh(int n);cin>>a>>b;len_a=lengh(a);len_b=lengh(b);if(len_a<=1&&len_b>=1)//位數為1位時{if(a<=5&&b>=5)cout<<5<<endl;if(a<=7&&b>=7)cout<<7<<endl;}if(len_a<=2&&len_b>=2)//位數為2位時{if(a<=11&&b>=11)cout<<11<<endl;}if(len_a<=3&&len_b>=3)//位數為3位時{for(m=1;m<=9;m+=2){for(n=0;n<=9;n++){number=m*100+n*10+m;if(number<a) continue;if(number>b) break; if(judge_prime(number)) cout<<number<<endl;}}}if(len_a<=5&&len_b>=5)//位數為5位時{for(m=1;m<=9;m+=2){for(n=0;n<=9;n++){for(p=0;p<=9;p++){number=m*10000+n*1000+p*100+n*10+m;if(number<a)continue;if(number>b)break; if(judge_prime(number))cout<<number<<endl;}}}}if(len_a<=7&&len_b>=7)//位數為7位時{for(m=1;m<=9;m+=2){for(n=0;n<=9;n++){for(p=0;p<=9;p++){for(q=0;q<=9;q++){number=m*1000000+n*100000+p*10000+q*1000+p*100+n*10+m;if(number<a)continue;if(number>b)break;if(judge_prime(number))cout<<number<<endl;}}}}}return 0; }?
總結
以上是生活随笔為你收集整理的回文质数(洛谷-P1217)的全部內容,希望文章能夠幫你解決所遇到的問題。
                            
                        - 上一篇: 输出亲朋字符串(信息学奥赛一本通-T11
 - 下一篇: 素数对(信息学奥赛一本通-T1403)