EOJ Problem 3089 篩法求質數

2021-08-04 11:53:31 字數 861 閱讀 8727

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後面第乙個沒劃去的數...