令 pi 表示第 i 個素數。現任給兩個正整數 m≤n≤104,請輸出 pm 到 pn 的所有素數。
輸入在一行中給出 m 和 n,其間以空格分隔。
輸出從 pm 到 pn 的所有素數,每 10 個數字佔 1 行,其間以空格分隔,但行末不得有多餘空格。
5 27
11 13 17 19 23 29 31 37 41 43
47 53 59 61 67 71 73 79 83 89
97 101 103
思路:n是否 為素數的判斷直觀上可以用從2到n-1的數去除,看餘數是否都不為0,若都不為0則n為素數。但是這種判斷方法的時間複雜度為o(n)。其實若n為素數,那麼在2~n-1的範圍內就會有至少兩個因子,肯定會滿足乙個大於等於
bool isprime(int n)
return true;
}bool isprime(int n)
return true;
}
上面的判斷方法可以用來生成素數表,時間複雜度為o(n還有一種篩選法——「埃氏篩法」更為高效一些,它的原理是從2開始,在求解的範圍內將2的倍數全部過濾掉,依次類推將3、5..的倍數都過濾掉。沒有被過濾的數說明沒有比它本身小的因數,那麼它就為素數。時間複雜度為o(nloglogn)。下面給出用這種方法解題的**。
#include using namespace std;
const int maxn = 1000001;
int prime[maxn];
bool p[maxn] = ;
int num = 0;
void findprim(int n)
if (num >= n) break;
for (int j = i + i; j < maxn; j += i)
}}int main()
else printf("\n"); }
return 0;
}
PAT乙級 數素數
令pi表示第i個素數。現任給兩個正整數m n 10000,請輸出pm到pn的所有素數。輸入在一行中給出m和n,其間以空格分隔。輸出從pm到pn的所有素數,每10個數字佔1行,其間以空格分隔,但行末不得有多餘空格。5 2711 13 17 19 23 29 31 37 41 43 47 53 59 6...
PAT乙級 數素數(20)
思路分析 1 如何判斷乙個素數!挺重要的,目前我對這種方法最熟悉,如果有自己的方法,此處可略過。5 小於2不是素數 0.1都不是素數 6 特判2 7 去掉2的倍數一定不是素數 8 12 從3開始對有可能的因子依次迴圈如果那個數能夠被因子整除 n i 0 那個數n就一定不是素數 2 將10000以內出...
PAT乙級 數字加密
本題要求實現一種數字加密方法。首先固定乙個加密用正整數 a,對任一正整數 b,將其每 1 位數字與 a 的對應位置上的數字進行以下運算 對奇數字,對應位的數字相加後對 13 取餘 這裡用 j 代表 10 q 代表 11 k 代表 12 對偶數字,用 b 的數字減去 a 的數字,若結果為負數,則再加 ...