思想:
利用“大於2的質數都是奇數”這一知識,將存放待篩整數空間減少一半,只存儲奇數。
利用“大於3的質數都不能被3整除”這一知識, 去掉比3大的 (3的倍數)
利用“大於5的質數都不能被5整除”這一知識, 去掉比5大的 (5的倍數)
利用“大於7的質數都不能被7整除”這一知識, 去掉比7大的 (7的倍數 )
...
...
利用“大於n的質數都不能被n整除”這一知識, 去掉比n大的 (n的倍數)
VB.net版
Dim N, i, j
N = CInt(Me.txtMaxNbr.Text)
Dim z(N)
Dim startTime As DateTime = Now
'initialize array
For i = 0 To N
z(i) = 0
Next
'mark multiples of i
For i = 2 To N / 2
For j = 2 * i To N Step i
z(j) = 1
Next
Next
'count unmarked numbers, which are primes
Dim nbr = 0
For i = 2 To N
If z(i) = 0 Then
nbr += 1
End If
Next
Me.lblNbrPrimes.Text = nbr
C#版
int k=Int32.Parse(textBox1.Text);
int b=0;
int [] a=new int[k+1];
for(int c=0;c<k+1;c++){
a[c]=0;
}
for(int i=2;i<=k/2;i++){
for(int j=2*i;j<=k;j+=i){
a[j]=1;
}
}
for(int m=2;m<=k;m++){
if (a[m]!=1)
b++;
}
label1.Text=b.ToString();