资讯专栏INFORMATION COLUMN

5大开发语言同时计算素数,谁快?

Ashin / 827人阅读

摘要:本文中的种开发语言为以下排名不分先后,只是提笔写的本文计算指定一个数,我们计算一下从到中的素数,并输出。

本文中的5种开发语言为:(以下排名不分先后,只是提笔写的)

  • C#
  • Python
  • C++
  • Go
  • Java

本文计算指定一个数targetNum,我们计算一下从1targetNum中的素数,并输出。

1. 本文在同一台虚拟机中运行计算

2. 各语言实现

2.1. C#语言

2.1.1. 开发环境

  1. VS2019
  2. .Net5.0

2.1.2. 代码

</>复制代码

  1. 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. 开发环境

  1. VSCode
  2. python 3.9.7

2.2.2. 代码

</>复制代码

  1. 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. 开发环境

  1. VS2019

2.3.2. 代码

</>复制代码

  1. 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(){
  2. primeNum(100);
  3. primeNum(200);
  4. primeNum(500);
  5. primeNum(1000);
  6. primeNum(2000);
  7. primeNum(5000);
  8. primeNum(10000);
  9. primeNum(50000); primeNum(100000);}

2.3.3. 执行结果

2.4. Go

2.4.1. 开发环境

  1. go version go1.17.2 windows/amd64
  2. VS Code

2.4.2. 代码

</>复制代码

  1. package mainimport(
  2. "fmt"
  3. "time")func main() {
  4. primeNum(100)
  5. primeNum(200)
  6. primeNum(500)
  7. primeNum(1000)
  8. primeNum(2000)
  9. primeNum(5000)
  10. primeNum(10000)
  11. primeNum(50000)
  12. primeNum(100000)}func primeNum(targetNum int){
  13. startTime := time.Now()
  14. var halfNum int
  15. var isPrimeNumber bool
  16. var numCount int
  17. halfNum=targetNum
  18. numCount=0
  19. for i := 2; i <= targetNum; i++ { halfNum=i/2
  20. isPrimeNumber = true
  21. for j := 2; j <= halfNum; j++ {
  22. if i%j ==0{
  23. isPrimeNumber=false
  24. break
  25. }
  26. }
  27. if isPrimeNumber{
  28. numCount=numCount+1 // fmt.Printf("%v数是素数/n",i)
  29. }
  30. }
  31. elapsedTime := time.Since(startTime) / time.Millisecond
  32. fmt.Printf("%v:素数计算总共耗时:%d ms ,素数个数为:%v/n",targetNum, elapsedTime,numCount)}

2.4.3. 执行结果

2.5. Java

2.5.1. 开发环境

  1. Java8
  2. Idea

2.5.2. 代码

</>复制代码

  1. 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. 效率折线

  1. C++ 最快
  2. Java和C#在这个上没有太大的区别(没有考虑预热
  3. GO表现并没有很快(没有使用协程)
  4. Python最慢

文章版权归作者所有,未经允许请勿转载,若此文章存在违规行为,您可以联系管理员删除。

转载请注明本文地址:https://www.ucloud.cn/yun/122563.html

相关文章

  • PHP 性能分析与实验——性能的宏观分析

    摘要:本文就改变性能分析的角度,并通过实例来分析出的性能方面需要注意和改进的点。如下是作为解释性语言的执行过程。这里分别启用和做实验。 此前,阅读过了很多关于 PHP 性能分析的文章,不过写的都是一条一条的规则,而且,这些规则并没有上下文,也没有明确的实验来体现出这些规则的优势,同时讨论的也侧重于一些语法要点。本文就改变PHP 性能分析的角度,并通过实例来分析出 PHP 的性能方面需要注意和...

    ZHAO_ 评论0 收藏0
  • PHP 性能分析与实验——性能的宏观分析

    摘要:本文就改变性能分析的角度,并通过实例来分析出的性能方面需要注意和改进的点。如下是作为解释性语言的执行过程。这里分别启用和做实验。 此前,阅读过了很多关于 PHP 性能分析的文章,不过写的都是一条一条的规则,而且,这些规则并没有上下文,也没有明确的实验来体现出这些规则的优势,同时讨论的也侧重于一些语法要点。本文就改变PHP 性能分析的角度,并通过实例来分析出 PHP 的性能方面需要注意和...

    Ilikewhite 评论0 收藏0
  • 四·C语言之·函数全方位理解

    摘要:我们在开发的过程中每个程序员都可能用的到,为了支持可移植性和提高程序的效率,所以语言的基础库中提供了一系列类似的库函数,方便程序员进行软件开发。形式参数当函数调用完成之后就自动销毁了。因此形式参数只在函数中有效。 ?写在前面 ?博客主页:kikoking的江湖背景?欢迎关注?点赞?收藏...

    legendaryedu 评论0 收藏0
  • 《十万字Java入门练习100例》1-10例——纸上得来终觉浅,绝知此事要躬行

    摘要:代码实现在控制台打印总结本篇文章带大家搭好环境,并体验了控制台打印。输出结果总结熟练掌握取余和整除运算,大有作用。终止本次循环,继续执行下一次循环。 ?本文收录...

    keithyau 评论0 收藏0
  • C语言第三期(1万字函数-数组-操作符详解)

    摘要:形式参数当函数调用完成之后就自动销毁了。函数调用传值调用函数的形参和实参分别占有不同内存块,对形参的修改不会影响实参。函数的声明一般出现在函数的使用之前。它其实就数组访问的操作符。 ...

    Jeff 评论0 收藏0

发表评论

0条评论

Ashin

|高级讲师

TA的文章

阅读更多
最新活动
阅读需要支付1元查看
<