本文中的5种开发语言为:(以下排名不分先后,只是提笔写的)
- C#
- Python
- C++
- Go
- Java
本文计算指定一个数targetNum,我们计算一下从1到targetNum中的素数,并输出。
1. 本文在同一台虚拟机中运行计算 2. 各语言实现 2.1. C#语言 2.1.1. 开发环境- VS2019
- .Net5.0
using System;
using System.Diagnostics;
namespace CSharpPrimeNumber
{
class Program
{
static void Main(string[] args)
{
PrimeNumber(100);
PrimeNumber(200);
PrimeNumber(500);
PrimeNumber(1000);
PrimeNumber(2000);
PrimeNumber(5000);
PrimeNumber(10000);
PrimeNumber(50000);
PrimeNumber(100000);
Console.ReadKey();
}
private static void PrimeNumber(int targetNum)
{
Stopwatch sw = new Stopwatch();
sw.Start();
for (int i = 2; i < targetNum; i++)
{
int halfNum = i / 2;
bool isPrimeNumber = true;
for (int j = 2; j < halfNum; j++)
{
if (i % j == 0)
{
isPrimeNumber = false;
break;
}
}
if (isPrimeNumber)
{
//Console.WriteLine($"数{i}是素数...");
}
}
sw.Stop();
TimeSpan ts2 = sw.Elapsed;
Console.WriteLine($"{targetNum}:素数计算总共花费{ts2.TotalSeconds}s.");
}
}
}
2.1.2. 执行结果
以下编译为Release并点击可执行程序运行
- VSCode
- python 3.9.7
from time import *
def primeNum(targetNum):
begin_time = time()
for i in range(2,targetNum):
halfNum=i/2
isPrimeNumber = True
j=2
while j <= halfNum:
if i%j==0:
isPrimeNumber=False
break
j=j+1
# if isPrimeNumber:
# # print(str(i)+'数是素数')
end_time = time()
run_time = end_time-begin_time
print ('{}:素数计算总共耗时:{}s'.format(targetNum,run_time))
primeNum(100)
primeNum(200)
primeNum(500)
primeNum(1000)
primeNum(2000)
primeNum(5000)
primeNum(10000)
primeNum(50000)
primeNum(100000)
2.2.2. 执行结果
以下使用命令行执行
2.3. C++ 2.3.1. 开发环境- VS2019
using namespace std;
void primeNum(int targetNum)
{
clock_t startTime = clock();
int numCount = 0;
for (int i = 2; i < targetNum; i++)
{
int halfNum = i / 2;
bool isPrimeNumber = true;
for (int j = 2; j <= halfNum; j++)
{
if (i % j == 0)
{
isPrimeNumber = false;
break;
}
}
if (isPrimeNumber)
{
numCount++;
//cout << "数" << i << "是素数..." << endl;
}
}
clock_t endTime = clock();
cout << targetNum << ":素数计算总共花费" << endTime - startTime<<" ms ,素数个数为:"<< numCount << endl;
}
int main()
{
primeNum(100);
primeNum(200);
primeNum(500);
primeNum(1000);
primeNum(2000);
primeNum(5000);
primeNum(10000);
primeNum(50000);
primeNum(100000);
}
2.3.3. 执行结果
2.4. Go
2.4.1. 开发环境
- go version go1.17.2 windows/amd64
- VS Code
package main
import(
"fmt"
"time"
)
func main() {
primeNum(100)
primeNum(200)
primeNum(500)
primeNum(1000)
primeNum(2000)
primeNum(5000)
primeNum(10000)
primeNum(50000)
primeNum(100000)
}
func primeNum(targetNum int){
startTime := time.Now()
var halfNum int
var isPrimeNumber bool
var numCount int
halfNum=targetNum
numCount=0
for i := 2; i <= targetNum; i++ {
halfNum=i/2
isPrimeNumber = true
for j := 2; j <= halfNum; j++ {
if i%j ==0{
isPrimeNumber=false
break
}
}
if isPrimeNumber{
numCount=numCount+1
// fmt.Printf("%v数是素数n",i)
}
}
elapsedTime := time.Since(startTime) / time.Millisecond
fmt.Printf("%v:素数计算总共耗时:%d ms ,素数个数为:%vn",targetNum, elapsedTime,numCount)
}
2.4.3. 执行结果
2.5. Java
2.5.1. 开发环境
- Java8
- Idea
public static void main(String[] args) {
PrimeNumber(100);
PrimeNumber(200);
PrimeNumber(500);
PrimeNumber(1000);
PrimeNumber(2000);
PrimeNumber(5000);
PrimeNumber(10000);
PrimeNumber(50000);
PrimeNumber(100000);
}
private static void PrimeNumber(int targetNum)
{
long startTime=System.currentTimeMillis(); //获取开始时间
int numCount = 0;
for (int i = 2; i < targetNum; i++)
{
int halfNum = i / 2;
boolean isPrimeNumber = true;
for (int j = 2; j <= halfNum; j++)
{
if (i % j == 0)
{
isPrimeNumber = false;
break;
}
}
if (isPrimeNumber)
{
numCount++;
// System.out.println(String.format("数%s是素数...",i));
}
}
//函数主体代码
long endTime=System.currentTimeMillis(); //获取结束时间
System.out.println(String.format("%s:素数计算总共花费%s ms,素数个数为:%s",targetNum,(endTime-startTime),numCount));
}
}
2.5.3. 执行结果
3. 效率折线
- C++ 最快
- Java和C#在这个上没有太大的区别(没有考虑预热)
- GO表现并没有很快(没有使用协程)
- Python最慢



