Prime Palindromes中的回文質數解決

2022-09-21 23:00:25 字數 1383 閱讀 3204

題目大意

給出a, b(5 <= a , b <= 100,000,000),求a,b區間內的所有為質數的回文數。

樣例輸入&輸出

sample input

5 500

sample output

分析&反思

有意義的一題。關鍵在於回文和質數的判斷。

首先我秒想到了篩質數,但有些忘記,便去複習,複習結果下一篇寫。總之九位數的陣列空間開不出來。

然後決定改良質數的判定,於是用遍歷因數至平方根,which又複習了sqrt( )函式,結果一波時間換空間,超時,只過6個點。

然後我把判回文放在了判質數的前面,如此一想的確判回文更好判,超時,過了8個點。

於是我點開了hint1,短短幾個詞:generatethe palindromes and see if they are prime.

哎,超時的原因就是每個數都去判斷,實際上大部分的數和這兩個條件根本不沾邊。

想方設法的造回文,剪枝,用dfs。dfs細節:

1. dfs的終止狀態一般不是到界,而是越界,> n+1什麼的不是很常見麼。

2. 上一題是輸出答案忘了0,這一題是往回文數里填數時忘了0。不是遍歷的不要想當然的把0扔了。切記啊!

**#include

#include

#include

#include

#include

using namespace std;

int a, b;

//int prime[10000002], tot, v[100000002];

/*void getlist(int size)

}}*/

int isprime(int x)

/*int check(int x)

int s = 1;

while(len > s)

return 1;

}*/int num[10], flag = 0;

int ans[1000002], cnt;

void dfs(int f, int t, int len)

if(isprime(x) && x >= a) ans[++cnt] = x;

return;

} for(int i = 0; i < 10; i++)

}int main()

for(int len = weia; len < 9; len++) dfs(len, 1, len);

sort(ans+1, ans+cnt+1);

for(int i = 1; i <= cnt; i++) cout << ans[i] << endl;

return 0;

}備註a不了的時候要耐心,看似一臉懵逼的問題,交給時間,總會迎刃而解的。加油。

回文質數 (Prime Palindromes)

題目描述 因為 151 既是乙個質數又是乙個回文數 從左到右和從右到左是看一樣的 所以 151 是回文質數。寫乙個程式來找出範圍 a,b 5 a輸入格式 第 1 行 二個整數 a 和 b 輸出格式 輸出乙個回文質數的列表,一行乙個。輸入輸出樣例 輸入5 500輸出5 711101131 151181...

回文質數 搜尋

usaco 1.5 因為151既是乙個質數又是乙個回文數 從左到右和從右到左是看一樣的 所以 151 是回文質數。寫乙個程式來找出範圍 a,b 5 a b 100,000,000 一億 間的所有回文質數 program name pprime input format file pprime.in ...

回文質數的思考

判斷回文方法 1.確定乙個數的各位儲存在陣列裡,再對應匹配 從個位開始儲存在棧中,直到1 2的位數,再將比1 2的位數高的那些位拿出來匹配,棧top 直到top 0 判斷十進位制位數方法 while 迴圈 2 int log10 n 判斷質數方法 for迴圈 2到i i簡單線性篩 book 0 1,...