time limit per test: 1.0 seconds
memory limit: 256 megabytes
輸入乙個整數 n
(2≤n
≤10000
) ,使用篩法計算並在一行中輸出所有不大於 n
的質數(每個質數之間留乙個空格,最後乙個質數之後沒有空格)。
輸入乙個正整數 (
1<
n<
10001
) 。
在一行中輸出所有不大於 n 的質數。
注意:兩個質數之間乙個空格分隔,最後乙個質數之後沒有空格,但需要輸出乙個換行符。
input
30
output
2 3 5 7 11 13 17 19 23 29
演算法參考 16c_2.ppt pp28-32 中的 sieve of eratosthenes 演算法。
參考資料:
自己寫的篩法,希望能給我點意見,非常感謝。
#include#include#include#include#include#includeusing namespace std;
#define primemax 10000
bool prime[primemax+1];
void isprime()//prime[i]儲存i是否是素數
int main()
{ isprime();
int n;
while(cin>>n)
{cout<<'2';
for(int i=3; i<=n; i++)
if(prime[i])
cout<<' '<
篩法求素數 線性篩法求素數
2021年更新版 篩法求素數 線性篩法求素數 要理解篩法求素數首先要知道乙個定理,整數唯一分解定理 任意大於等於2的正整數都有且只有一種方式寫出其質因子的乘積表示式。a p1p2p3p4 pn pi是素數且pi pj eg 2 2 4 22 12 223 36 2233 也就是說任意乙個合數都能分成...
C 推法求質
判斷乙個質數我們往往直接暴力,可如果是要找出從1到n的所有質數,並將它們存在乙個陣列裡時,我推薦還是使用推法求質吧。思路很簡單,就是從2開始列舉到n,每次用已經找到的質數去判斷這個數是不是質數,如果是就加到陣列裡,否則扔掉就ok了。實現並不難,就是乙個簡單的模擬。ps nr是指質數個數的上限 inc...
篩法求素數
素數篩法就是每次把已知的素數的倍數曬去,篩掉前sqrt n 中素數的倍數就可以了 先把n個自然數按次序排列起來。1不是質數,也不是合數,要划去。第二個數2是質數留下來,而把2後面所有能被2整除的數都劃去。2後面第乙個沒劃去的數是3,把3留下,再把3後面所有能被3整除的數都劃去。3後面第乙個沒劃去的數...