PAT乙級 數素數

2021-09-26 05:01:34 字數 1067 閱讀 4753

令 p​i​​ 表示第 i 個素數。現任給兩個正整數 m≤n≤10​4​​,請輸出 p​m​​ 到 p​n​​ 的所有素數。

輸入在一行中給出 m 和 n,其間以空格分隔。

輸出從 p​m​​ 到 p​n​​ 的所有素數,每 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 的數字,若結果為負數,則再加 ...