资讯专栏INFORMATION COLUMN

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

Ashin / 655人阅读

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

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

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

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

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

2. 各语言实现

2.1. C#语言

2.1.1. 开发环境

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

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

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

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

2.4.2. 代码

package mainimport(	"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. 开发环境

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

  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元查看
<