Golang實現併發質數篩選法

2021-08-25 06:06:40 字數 701 閱讀 3857

質數篩選法(埃拉託斯特尼篩法)是在乙個尋找給定範圍內最大質數的古老演算法。它通過一定的順序篩掉多個質數的乘積,最終得到想要的最大質數。

這個演算法的並行版本定義了多個 goroutine,每個 goroutine 代表乙個已經找到的質數,同時有多個 channel 用來從 generator 傳輸資料到 filter。每當找到質數時,這個質數就會被一層層 channel 送到 main 函式來輸出。

// a concurrent prime sieve

package main

import "fmt"

// send the sequence 2, 3, 4, ... to channel 'ch'.

func generate(ch chan

}// copy the values from channel 'in' to channel 'out',

// removing those divisible by 'prime'.

func filter(in

}}// the prime sieve: daisy-chain filter processes.

func main()

}

演算法流程圖形說明:

質數 篩選法

篩數法求素數 篩數法求素數的基本思想是 把從1開始的 某一範圍內的正整數從小到大順序排列,1不是素數,首先把它篩掉。剩下的數中選擇最小的數是素數,然後去掉它的倍數。依次類推,直到篩子為空時結束。public void printprimes int n 定義arr陣列來表示篩選出來的素數 boole...

質數篩選 素數篩選法

int prime 100010 void prime for int i 1 i i 1000000 i define size 1000000 int main 元素值為0代表是素數 int prime size int pos 0 int flag for int i 2 i size i p...

用篩選法求質數

file exam 1 1.c brief exam 1 1 用篩選法求100以內的質數 質數 prime number 又稱素數,有無限個。乙個大於1的自然數,除了1和它本身外,不能被其他自然數整除,換句話說就是該數除了1和它本身以外不再有其他的因數 否則稱為合數。根據算術基本定理,每乙個比1大的...