素數迴文——輸出兩整數之間所有既是迴文數又是素數的數 C++實現
問題分析與演算法設計
所謂迴文素數是指,對一個整數n從左向右和從由向左讀其結果值相同且是素數,即稱n為迴文素數。所以本題的重點不是判斷素數的方法,而是求迴文整數。構造迴文數的方法很多,這裡僅介紹一種最簡單的演算法。實現思路是判斷一個數,若既是迴文數又是素數將其輸出.
素數判斷
演算法基本思路如下:讓x被2到sqrt(x)除,如果x能被2至sqrt(x)之中任何一個整數整除,那麼說明x不是質數,否則是質數。原因不再說明,具體程式碼如下:
int isPrime(int x)
{
int flag=1;
int k=(int)(sqrt(double(x+1)));
for(int i=2;i<=k;i++)
{
if(x%i==0)
{
flag=0;
break;
}
}
if(flag)
return 1;
return 0;
}
迴文數判斷
基本思路:用模除10讀出低位數位,然後入佇列,然後用整除10刪除這個數位,再用模除10讀出新的最低位,再入列,再整除10刪除這個數位,如此迴圈,終止條件是整除後已經為0了,這樣就表示整個數都已經從低到高位逐位入列了。然後原來的從低位開始出列,出一位就乘10,然後再出一位累加,再乘10,再累加,直到所有的數位都出列,實際上出來的結果就是把原來的數字倒序了一次,由於倒序後仍然是一個數字,所以可以直接將原來的數字和倒序後的數字比較,如果相同即為迴文數,否則不是。
另外,上面所說藉助佇列也只是為了說明的更加清晰更加易懂而已,用堆疊來實現是同樣的道理,這只是為了構造那個倒序數的一個手段而已,實際上,細心考慮一下,其實可以根本不必藉助這些資料結構的,在讀出了低位後直接就寫入新的那個倒序數就可以了,程式碼如下:
int isHuiwen(int x)
{
int c,t=0;
c=x;
while(c)
{
t*=10;
t+=c%10;
c/=10;
}
if(t==x)
return 1;
return 0;
}
主函式
int main()
{
int a,b;
while(cin>>a>>b && a!=0 && b>a &&b!=0)
{
for(a=a;a<=b;a++)
{
if(isHuiwen(a)&&isPrime(a))
{
cout<<a<<endl;
}
}
}
return 0;
}
測試用例
輸出1到1000之間所有的素數迴文數,結果截圖如下:
相關文章
- Prime Palindromes( 素數迴文) C++實現C++
- ACM之判斷迴文數ACM
- 1013 數素數 (20分)/c++實現C++
- C 語言輸出100至200之間的質數(素數)
- python 輸入一個整數,判斷其是否既是3的倍數,又是5的倍數Python
- Python:判斷一個正整數是否為迴文數Python
- 特殊迴文數(很坑
- java判斷迴文數Java
- 藍橋杯之特殊迴文數JAVAJava
- PAT1013數素數C++C++
- 使用python判斷某個數是不是素數及輸出100以內的所有素數Python
- 素數計數函式函式
- 【數論】素數篩法
- ACM 素數ACM
- LeetCode迴文數(Python)LeetCodePython
- C語言:迴文數計算C語言
- LeetCode9[迴文數]LeetCode
- python3 輸出101到200之間的素數,並統計個數Python
- Python演算法實現質數(素數)判斷Python演算法
- 求素數(質數)演算法演算法
- 簡單的素數問題(C++)C++
- LeetCode-N9-迴文數LeetCode
- java列印出迴文數格式方陣Java
- 可抹位迴文數方程式
- leetcode的第9題:迴文數LeetCode
- 初等數論——素數,逆元,EXGCD有關GC
- 素數個數 <埃式篩 && 尤拉篩>
- python 學習--使用filter來實現判斷迴文數PythonFilter
- 10月15日 棧和佇列實現迴文數字佇列
- PAT-B 1079 延遲的迴文數【字串+大數加法】字串
- C語言 不大於2019的最大反數、迴文數C語言
- 計算素數【Java】Java
- 表示素數的函式函式
- 每日一道演算法:迴文數演算法
- 閒聊藍橋杯JAVA - 生成迴文數Java
- (演算法)求1到1億間的質數或素數演算法
- Find Terrorists(素數篩選+素因子分解)Error
- 用遞迴的方法列印出輸入的任意整數遞迴