使用篩選法求N以內的素數

2021-09-27 09:08:03 字數 1116 閱讀 7220

1. 使用篩選法求素數的思想是:使用乙個bool isprime[n]來儲存乙個數是不是素數的標誌位。

首先偶數不是素數(2除外),將2的倍數isprime全部設定為false。

i從3開始遍歷,如果i為素數,則將i的倍數isprime全部設定成false。這樣就篩選掉了好多不是素數的數。

從0遍歷isprime[i]陣列,如果值為true,則說明i為素數,否則i不是素數。

2. **如下:

1 #include 2 #include 3 #include 4

using

namespace

std;56

#define n 10000001

7bool

isprime[n];89

bool prime(int

n)10

15if (n==2)16

19int upper=sqrt(static_cast(n));

20for (int i=2;i<=upper;i++)

2126}27

return

true;28

}29intmain()

3040

else

4144}45

int upper=sqrt(static_cast(n));

46for(int i=3;i2)47

54}55}

56int count=0;57

for (int i=0;i)

5864

}65 cout

6667

//最原始的求素數方法,速度很慢

68//

int count=0;

69//

for (int i=2;i70

//75//}

76//

cout<77

return0;

78 }

3. **可以做如下優化:

1. isprime陣列大小可減少為原來的一半,只儲存素數的標誌位,不儲存偶數的標誌位。畢竟偶數都不是質數。

2. 如果判斷乙個數是不是素數,可以維護乙個很大的素數表,即將一定範圍內的素數首先都求出來,儲存在陣列內,為了節省記憶體可以使用位圖儲存。

篩選法求n以內素數(質數)

設定乙個標誌陣列isprime,isprime i 的值是1就表示i是素數。開始陣列元素值全部為1劃掉k的倍數,就是把isprime 2 k isprime 3 k 置成0最後檢查isprime陣列,輸出isprime i 為1的那些i include include using namespace...

篩選法求100以內的素數

step1 初始化乙個a陣列,從a 2 到a 100 以內都為自己。step2 對每個數,如果可以被2,3,5,7,11,13.素數 整除則該數設為0,因為素數的倍數是可以被除1和本身以外的其它數整除,是合數 step3 列印出所有非0的數,即為素數。改自愛課程 c語言程式設計 蘇小紅老師 incl...

篩法求n以內的素數

篩法求素數 把2到n中所有的數都列出來,然後從2開始,先劃掉n內所有2 的倍數,然後每次從下乙個剩下的數 必然是素數 開始,劃掉其n內的所有倍數。最後剩下的數,就都是素數。空間換時間,加快了計算速度。include include include include define maxn 100000...