统计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))
}