统计1-2000000中的素数
php采用的是最版的php7.4
golang采用的是最新版的1.16,开启4个协程
<?php $startTime = time(); $number = 2000000; $primeNumbers = []; for ($i=1;$i<$number;$i++){ if ($i == 1){ $primeNumbers[] = $i; continue; } $flag = true; for ($j=2;$j<$i;$j++){ if ($i % $j == 0){ $flag = false; break; } } if ($flag){ $primeNumbers[] = $i; } } $endTime = time(); echo "progress time = ".($endTime - $startTime)."\n"; echo "prime count =".count($primeNumbers);
package main import ( "fmt" "time" ) func saveData(dataChan chan int){ var number = 2000000 for i:=1;i<number;i++{ dataChan <- i } close(dataChan) } func dealData(dataChan chan int,statusChan chan bool,primeDataChan chan int) { for { value,status := <- dataChan if !status{ statusChan <- true break } flag := false if value == 1{ primeDataChan <- value continue } for i:=2;i<value;i++{ if value % i == 0{ flag = true break } } if !flag{ primeDataChan <- value } } } func main() { var number int = 4 implementTime := time.Now() primeDataChan := make(chan int,2000000) dataChan := make(chan int,1000) statusChan := make(chan bool,4) go saveData(dataChan) for i:=1;i<=number;i++{ go dealData(dataChan,statusChan,primeDataChan) } for i:=1;i<=number;i++{ <- statusChan } fmt.Printf("progress time = %v \n",time.Since(implementTime).Seconds()) fmt.Println("prime count =",len(primeDataChan)) }