2048 篩法求素數

2022-05-22 03:24:12 字數 754 閱讀 1429

time limit: 1 second

memory limit: 2 mb

問題描述

由希臘著名數學家埃拉託斯尼斯提出的所謂「篩法」,是一種高效率的求素數的方法。請用集合的方式來實現這一演算法,求2~n(n<=200)之間的素數。

一行,乙個小於200的整數n。

多行,每行輸出10個數字,每個數字採用場寬5。

40
2    3    5    7   11   13   17   19   23   29

31 37(換行)

【題解】

先剔除1,然後最小的數字是2,再把2的倍數剔除,接下來最小的數字是3.再把3的倍數剔除。最小的數字是5,再。。

每次最小的數字就是質數。

【**】

/*

*/#include const int maxn = 200;

bool bo[maxn + 10];

int n;

void input_data()

void get_ans()

for (int m = i;m <= n;m++) //剔除i的倍數

if ( (bo[m]) && ((m % i) == 0)) //要注意不要重複篩同乙個數。不然會死迴圈。。

if (j ==0) break;

while (bo[i] == false) i++; //找下乙個最小的數。

}}int main()

篩法求素數 線性篩法求素數

2021年更新版 篩法求素數 線性篩法求素數 要理解篩法求素數首先要知道乙個定理,整數唯一分解定理 任意大於等於2的正整數都有且只有一種方式寫出其質因子的乘積表示式。a p1p2p3p4 pn pi是素數且pi pj eg 2 2 4 22 12 223 36 2233 也就是說任意乙個合數都能分成...

素數篩法求素數

素數篩類似於打表標記,預先處理掉非素數的數,即素數的倍數 任意非素數都可以由幾個素數相乘得到 於是效率比暴力求解快得多。埃氏篩法的效率為o n loglog n 簡單易懂,但是會重複標記,比如當i為2時,6會被標記掉,然而當i為3時,6又會被重複標記,這樣的重複訪問加大了時間複雜度,於是有了尤拉篩。...

篩法求素數

素數篩法就是每次把已知的素數的倍數曬去,篩掉前sqrt n 中素數的倍數就可以了 先把n個自然數按次序排列起來。1不是質數,也不是合數,要划去。第二個數2是質數留下來,而把2後面所有能被2整除的數都劃去。2後面第乙個沒劃去的數是3,把3留下,再把3後面所有能被3整除的數都劃去。3後面第乙個沒劃去的數...