5大开发语言同时计算素数,谁快?
Posted 愿你走出半生
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了5大开发语言同时计算素数,谁快?相关的知识,希望对你有一定的参考价值。
本文中的5种开发语言为:(以下排名不分先后,只是提笔写的)
- C#
- Python
- C++
- Go
- Java
本文计算指定一个数targetNum
,我们计算一下从1
到targetNum
中的素数,并输出。
1. 本文在同一台虚拟机中运行计算
2. 各语言实现
2.1. C#语言
2.1.1. 开发环境
- VS2019
- .Net5.0
2.1.2. 代码
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
并点击可执行程序运行
2.2 Python
2.2.1. 开发环境
- VSCode
- python 3.9.7
2.2.2. 代码
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
2.3.2. 代码
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
2.4.2. 代码
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 ,素数个数为:%v\\n",targetNum, elapsedTime,numCount)
}
2.4.3. 执行结果
2.5. Java
2.5.1. 开发环境
- Java8
- Idea
2.5.2. 代码
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最慢
以上是关于5大开发语言同时计算素数,谁快?的主要内容,如果未能解决你的问题,请参考以下文章