回文質數的思考

2021-09-30 00:00:47 字數 1173 閱讀 1983

判斷回文方法 1.

:確定乙個數的各位儲存在陣列裡,再對應匹配:從個位開始儲存在棧中,直到1/2的位數,再將比1/2的位數高的那些位拿出來匹配,棧top–,直到top=0;

判斷十進位制位數方法

while 迴圈 2

(int)log10(n);

判斷質數方法

for迴圈 2到i*i簡單線性篩:book[0]=1,book[1]=1,用for遍歷2~n , 小於等於n大於2的所有2的倍數設為合數(book[2k]=1)(用while),再除3以外3的所有倍數設為合數(book[3k]=1),4因為是合數跳過(book[4]==1)…,若book[k]==0為質數,反則為合數。

快速線性篩:同樣先0,1去除,遍歷2~n,從2開始的每個數按一定的方式和小於它的一些數相乘,這些相乘得到的合數的book設為1,以達到避免重複計算合數的目的。(如在簡單線性篩中36=218=312還帶來重複計算,我們需要找到一種優化的方法不會重複篩除乙個合數)

那麼這種方法前人已經提出:

如果i為素數, i 乘以不大於 i 的素數得到的合數book=1;

如果i為合數,將合數和它的最小質因數相乘得到的合數book=1;

如果是乙個質數和他之前全部質數相乘,如果是奇合數和在包括它最小質因子之前的質因數相乘,如果是偶合數和2相乘

2 * 2 , 3 * 2 , 3 * 3 , 4 * 2,5 * 2,5 * 3 ,5 * 5 , 6 * 2 , 7 * 2 , 7 * 3 , 7 * 5 , 7 * 7…

這些合數會包括

所有兩個質數的乘積(15=31*51)

合數和它最小質因子的乘積(16=8*2)

合數 * 最小質數=合數,,

而不讓合數 * 其他大一丟的質數

若允許43=(2 * 2) * 3=12則62=(2 * 3) * 2=12重複,

這表明該合數i=p1 * p2 * … * pn若和大一丟的質數ps相乘,則存在大於i的合數i』=p2p3…pnps使得i』p1和ips相等導致重複(說明合數不需要去和大的質數或者合數相乘,因為該相乘得到合數可以通過某乙個合數和它的最小質數相乘得到)

(前面的合數 i=p1 * p2…*pn, //pi都是素數(2<=i<=n), pi<=pj ( i<=j ))

**參考

題目參考(luoguo1217)

題解參考

回文質數 搜尋

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

回文質數 (Prime Palindromes)

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

演算法OJ 回文質數

時限 1000ms 記憶體限制 10000k 總時限 3000ms 描述 因為151既是乙個質數又是乙個回文數 從左到右和從右到左看是一樣的 所以151是回文質數 寫乙個程式來找出範圍 a,b 5 a輸入 第一行 兩個整數 a和b 輸出 輸出乙個回文質數的列表,一行乙個 輸入樣例 5 500 輸出樣...