一.Golang
//统计二十万以内的素数
package main
import (
"fmt"
"time"
)
var (
intChan chan int
primeChan chan int
exitChan chan bool
)
func isPrime(i int) bool {
for j := 2; j < i; j++ {
if i%j == 0 {
return false
}
}
return true
}
func primeNum() {
for {
v, ok := <-intChan
if !ok { //如果读不出数据
break
}
if isPrime(v) {
primeChan <- v
}
}
fmt.Println("一个协程完成工作!")
//置一个退出标志
exitChan <- true
}
func putNum() {
for i := 1; i <= 200000; i++ {
intChan <- i
}
close(intChan)
}
func main() {
intChan = make(chan int, 1000)
primeChan = make(chan int, 100000)
exitChan = make(chan bool, 6)
start := time.Now().Unix()
//开启协程向 intChan 放数据
go putNum()
//开启六个个判断素数协程
for i := 0; i < 6; i++ {
go primeNum()
}
//主进程结束判断
go func() {
for i := 0; i < 6; i++ {
<-exitChan
}
end := time.Now().Unix()
fmt.Printf("total time used: %v s\n", end-start)
close(primeChan)
}()
//读出结果
for {
_, ok := <-primeChan
if !ok {
break
}
//fmt.Println(res)
}
fmt.Println("主线程退出")
}
一个协程完成工作!
一个协程完成工作!
一个协程完成工作!
一个协程完成工作!
一个协程完成工作!
一个协程完成工作!
total time used: 2 s
主线程退出
Process exiting with code: 0
二.C++
#include <cstdio>
#include <queue>
#include<time.h>
bool isPrime(int i)
{
for (int j = 2; j < i; j++)
{
if (i % j == 0)
return false;
}
return true;
}
int main()
{
clock_t start, finish;
double totaltime;
start = clock();
std::queue<int> q;
for (int i = 2; i < 200000; i++)
{
if (isPrime(i))
{
q.push(i);
//printf("%d\n", i);
}
}
finish = clock();
totaltime = (double)(finish - start) / CLOCKS_PER_SEC;
printf("total time used: %lf s", totaltime);
return 0;
}
total time used: 5.007000 s
总结:CPP还是厉害啊!