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 43. **可以做如下優化: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 }
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...