本文中的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最慢
轉載請註明出處,本文鏈接:https://www.uj5u.com/qita/312273.html
標籤:其他
