猫史档案馆


【性能对比】多语言Prime列表性能测试:最慢的不是Python,最快的不是C++

用户:Albert钟Albert钟查看:3 回复:3 评论:3 创建时间:2021-08-04T10:03:12


-----------------------------水贴分割线---------------------------------------------


首先介绍一下测试的算法----指数列表过筛法:筛法(挨拉托色尼筛法)是一种用来求所有小于N的素数的方法。把从2(素数是指大于1的自然数)开始的某一范围内的正整数从小到大按顺序排列,逐步筛掉非素数留下素数。(百度词条)数学界一般认为这是最快的质数求解法。本次测试取100000以内的质数。


1. Python


?123456789101112131415161718192021 import  time  def  generatePrime( max ):      prime  =  [ 2 , ]      num  =  range ( 3 max )      for  in  num:          for  in  prime:              if  %  = =  0 :                  break          else :              print (i)              prime.append(i)      return  prime  st  =  time.time() prime  =  generatePrime( 100000 ) print (prime) et  =  time.time() dt  =  et  -  st print (dt)     

(cpython)单次运行时间:10749ms(这也够慢了)
不得不提,经过几次测(shi)试(bai),使用迭代器可以大大节省运行时间


2. JavaScript


?123456789101112131415161718192021222324 function  generatePrime(max) {      var  prime = [2, ];      for  ( var  i = 3; i <= max; i++) {          for  ( var  j = 0; j < prime.length; j++) {              var  p = prime[j];              if  (i % p == 0) {                  break ;              }          }          if  (j == prime.length) {              prime.push(i);              console.log(i);          }      }      return  prime; }  var  st =  new  Date().getTime(); var  prime = generatePrime(100000); console.log(prime); var  et =  new  Date().getTime(); var  dt = et - st; console.log(dt);     

代码普普通通,没有什么特色
(node)单次运行时间:22869ms(!!!!!比Python慢好多、、、)


3. C++


?123456789101112131415161718192021222324252627282930313233 #include <iostream> #include <vector> #include <ctime> using  namespace  std;  vector< int > generatePrime( int  max) {      vector< int > prime;      prime.push_back(2);      for  ( int  i = 3; i <= max; i++) {          int  p, j;          for  (j = 0; j < prime.size(); j++) {              p = prime[j];              if  (i % p == 0) {                  break ;              }          }          if  (j == prime.size()) {              prime.push_back(i);              cout << i << endl;          }      }      return  prime; }  int  main() {      clock_t  st =  clock ();      vector< int > prime = generatePrime(100000);  // main function      clock_t  et =  clock ();      double  dt = ( double )(et - st) / CLOCKS_PER_SEC;      cout << dt << endl;      return  0; }     

(g++编译后)单次运行时间:3726ms(不愧是C++)


4. PHP(同喵表ASP等混合编程技术)


?1234567891011121314151617181920212223242526272829303132333435363738394041424344454喵748 <?php class  runtime {   // from https://www.cnblogs.com/imkun/archive/2012/11/01/2749989.html      var  $StartTime  = 0;       var  $StopTime  = 0;          function  get_microtime() {           list( $usec $sec ) =  explode ( ' ' , microtime());           return  ((float) $usec  + (float) $sec );               function  start() {           $this ->StartTime =  $this ->get_microtime();               function  stop() {           $this ->StopTime =  $this ->get_microtime();               function  spent() {           return  round (( $this ->StopTime -  $this ->StartTime) * 1000, 1);          }  function  generatePrime( $max ) {      $prime  array (2);      for  ( $i  = 3;  $i  <=  $max $i ++) {          for  ( $j  = 0;  $j  count ( $prime );  $j ++) {              $p  = prime[ $j ];              if  ( $i  $p  == 0) {                  break ;              }          }          if  ( $j  ==  count ( $prime )) {              array_push ( $prime $i );              echo  $i ;          }      }      return  $prime ; }  $runtime new  runtime; $runtime ->start(); $prime  = generatePrime(100000); echo  $prime ; $runtime ->stop(); echo  $runtime ->spent(); ?>

(本地运行溢出,喵php/运行)单次运行时间:15855.9ms(也比Python慢不少)


5. Java(待补充)


Java还在学习阶段,水平不足~~ Java不但烧喵U,还烧脑,保护大脑起见,就不搞Java了,恳请大佬补充!!!


6. Go(MVP)


?1234567891011121314151617181920212223242526272829303132 package main import  (      "fmt"      "time" )  func generatePrime( max  int ) [] int  {      prime : =  [] int { 2 , }      for  i : =  3 ; i < =  max ; i + +  {          var j, p  int  / /  first declerd          for  =  0 ; j <  len (prime); j + +  {              =  prime[j]              if  %  = =  0  {                  break              }          }          if  = =  len (prime) {              prime  =  append(prime, i)              fmt.Println(i)          }      }      return  prime }  func main() {      st : =  time.Now().UnixNano()      prime : =  generatePrime( 100000 )      fmt.Println(prime)      et : =  time.Now().UnixNano()      dt : =  float喵((et  -  st)  /  1e6 )      fmt.Println(dt) }

单次运行时间:2143ms(!!!!!!比C++快1s有余)
Go---yyds!!!!


编者按:本帖纯水,大佬不喜勿喷QwQ


回复

上一页1 页 / 共 1下一页
Albert钟Albert钟

社区API也有乱码的时候??az。。。

点赞0


评论


Python-happyyyyPython-happyyyy

++

点赞0


评论


Albert钟Albert钟

喵d

点赞0


评论