1. 程式人生 > >計數質數 go實現

計數質數 go實現

統計所有小於非負整數 n 的質數的數量。

示例:

輸入: 10
輸出: 4
解釋: 小於 10 的質數一共有 4 個, 它們是 2, 3, 5, 7 。

埃拉託斯特尼篩法
篩選的主要方法
1.劃去2的倍數;
2.劃去3的倍數;
3 劃去5的倍數;(4的倍數同為2的倍數,已被劃去)
4.劃去7的倍數;(6的倍數同為3的倍數,已被劃去)
5.劃去11的倍數;(8和10的倍數同為2的倍數,而9的倍數也是3的倍數)
所以驗證一個數是否是素數,可以用它來除以2,3,5,7,11。

埃拉託斯特尼篩法
?
。)
func countPrimes(n int) int {
       if n < 3 {
        return 0
    }
    
   flag := make([]bool,n)
    num:=n/2
    for i:=3;i*i<n ;i+=2  {
        if flag[i] {
	continue
        }
        for j:=i*i;j<n ;j+=2*i  {
	if !flag[j] {
	    num--;
	    flag[j]=true
	}
        }
    }
    return num
}