計算整數N 以內所有素數 埃拉託色尼篩法

2021-06-12 04:50:29 字數 1004 閱讀 4584

問題:給定正整數n(n>1),求n以內所有素數

埃拉託色尼篩法利用合數質因數分解原理,首先將所有數假設為素數,標為1,然後,將已知素數的倍數(非素數)標記為0,最後,所有標為1的數即為素數。**如下:

#include #include int main(int argc, char **argv)

int i = 0, j = 0;

for (i = 0; i < n; i++)

for (i = 2; i < n; i++)

} } for (i = 2; i < n; i++)

} return 0;

}

改進方案:

採用int型陣列,會占用太多空間,可以改為位陣列。

#include #include #include #define n 10000010

#define bitmask(b) (1 << ((b) % char_bit))

#define bitslot(b) ((b) / char_bit)

#define bitset(a, b) ((a)[bitslot(b)] |= bitmask(b))

#define bitclear(a, b) ((a)[bitslot(b)] &= ~bitmask(b))

#define bittest(a, b) ((a)[bitslot(b)] & bitmask(b))

#define bitnslots(nb) ((nb + char_bit - 1)/char_bit)

char num[bitnslots(n)];

int main(int argc, char **argv)

for (i = 2; i < n; i++)

} }

for (i = 2; i < n; i++)

} return 0;

}

計算n以內的所有素數

尋找素數我們最常用的方法是暴力求解法,就是沒對於每個數n,從2找到n的開方,判斷每個數是不是素數,時間複雜度度為o nlog2n 時間複雜度高,是肯定的,因為太 暴力 所以,我想換個思路,其實求素數的過程,就是去除合數的過程,如果對於乙個雜湊,去除了合數,那麼留下的就是素數了,時間複雜度接近o n ...

求N以內的所有素數

如下 include stdafx.h include conio.h include math.h include malloc.h typedef long long prime typedef struct pn 構造素數節點 struct pn next pn static pn prime...

輸出n以內的所有素數(質數)

素數 質數 除能被自己和1整除,不能被其他數整除的數叫素數,1和0既非素數也非合數。素數一定是不能整除2和3,但不能整除2和3的不一定是素數如35和49 def odd iter n liste i for i in range 2,n 1 k 0while k思路分析 1 先生成3開頭的奇數,因為...