为了验证C++到底比Java快多少分别用两种语言计算100万以内的质数,并记录时间

C++的程序是

clock_t start,ends;

start=clock();

int i, j;

for(i=2;i<1000000; i++) {

for(j=2;j <= (i/j); j++) {

if(!(i%j)){

break;

}

}

if(j> (i/j)) {

//  cout << i << " 是质数\n";

}

}

ends=clock();

cout<<(ends-start)*1000/CLOCKS_PER_SEC<<endl;

Java的程序是

long sysDate1 =System.currentTimeMillis();

int i, j;

for(i=2;i<1000000;i++) {

for(j=2;j<= (i/j);j++) {

if((i%j==0))

{

break;

}

}

if(j >(i/j)) {

//  System.out.println(i+"是质数\\n");

}

}

long sysDate2 =System.currentTimeMillis();

System.out.println(sysDate2-sysDate1 );

这两个程序的结构基本是相同的不存在程序设计本身快慢的问题,每个程序运行60次,得到4组数据

c++(不显示中间过程ms) 显示过程ms java(不显示中间过程ms) 显示过程ms
967 58228 844 1624
738 57315 549 1716
736 56691 929 1833
784 57116 862 1884
768 56679 866 1801
888 81498 922 1801
713 79003 860 1792
881 79574 833 1891
962 79737 851 1806
875 78760 916 1894
729 78189 786 1807
846 82891 735 1777
860 79148 785 1745
870 76569 878 1737
788 79128 754 1770
779 72847 828 1895
731 74039 852 1766
656 72004 919 1863
835 76723 858 1979
839 77570 857 1882
840 70929 924 1747
833 73277 952 1861
900 73976 659 1765
747 73794 783 1830
795 73472 813 1764
849 70584 769 1784
832 72319 834 1740
809 71475 892 1810
834 72823 818 1808
766 71847 834 1684
平均
815 72606.83333 832.0666667 1801.866667
标准差
70.69370552 7616.064198 82.16809329 71.20521204
* * 0.020940695 40.29534187

可以看到在不显示中间过程

//   cout << i << " 是质数\n";

//  System.out.println(i+"是质数\\n");

的情况下C++30次平均用时815ms,Java用时832ms,C++比Java快2.1%。

但是如果将中间运算过程打印到控制台并显示

cout << i << " 是质数\n";

System.out.println(i+"是质数\\n");

C++平均用时72606ms,Java用时1801ms,Java的控制台显示速度是C++的40倍。

所以运算量很大希望看看中间的运算过程看看是没算完还是死机了,显示样本的比例就非常重要,2%的速度优势很容易就被40倍的控制台显示速度给消耗掉了。

比如这道题很容易用方程算出

815+71791*x/78498=832+969*x/78498

X=18,也就是说每4361(78498/18)个显示1个的比例C++才可能比Java快

只要x>18个Java的速度就比C++快。

很容易得到方程Java/C++的速度比,x是显示的样本数量

(63975870+71791*x)/(65310336+969*x)=y

当样本数量x<=18时C++>Java

当样本数量x>=18时C++<Java

所以对这道题当不显示中间过程的情况下C++比Java快2.1%,如果需要显示过程当抽样总数量超过18个的时候Java比C++快,如果需要显示所有的中间过程Java比C++快40倍.

C++的速度比Java快2.1%:来自计算100万以内质数的实验数据对比相关推荐

  1. java 10000阶乘_Java ForkJoinPool: 3秒计算100万的阶乘

    问题背景&思路 如果需要计算100的阶乘,那应该怎么做? 方法1: for循环(默认,单线程) 方法2: 多线程,MapReduce思想 main线程开启多个子任务(个数=CPU核心数),放到 ...

  2. java存款只能存100_有100万存款,怎么样存银行才是最佳方法呢?

    100万全部存一家银行肯定是没这么安全的,真正想做到绝对的安全还是建议你分两家银行存,这样才是真正的安全,下面进行详细分析. (1)100万从存款安全角度考虑 相信储户们都知道银行每年都是必须要购买存 ...

  3. JAVA计算斐波那契第100万项的最快算法排名汇总

    最近在知乎上看到一个有趣的算法题:斐波那契数列的第一百万项怎么用 C++ 求? 看了几个大神的解答后,注意到很少有用JAVA代码去解决这个问题的,可能一方面java对这种超大数高精度的运算本身就不是特 ...

  4. java 100万 100 最大 选出_面试真题:求100万内的质数

    一个头发稀少.穿着格子衬衣的中年男子走了进来,把手里拿的MAC放在桌子上,对我说:"我会用电脑记录面试过程,你不要介意啊". 我回答到:"没关系." 面试官:& ...

  5. java快排算法解读,java 快排的思路与算法

    java 快排的思路与算法 有时候面试的时候的会问道Arrays.sort()是怎么实现的,我以前根本不知道是什么东西,最近点进去看了一下.直接吓傻, //看到这个时候还是比较淡定的,可怕的事情来了. ...

  6. java 快死了_如果Java快死了,那么它肯定看起来非常健康

    java 快死了 Java快要死了的奇怪但流行的断言只能在没有证据的情况下提出,而不是因为它. 在酷孩子闲逛的论坛(Hacker News,Reddit等)中反复出现的偏见与Java语言背道而驰. 人 ...

  7. 如果Java快死了,那么它肯定看起来非常健康

    Java快要死了的奇怪但流行的断言只能在没有证据的情况下提出,而不是因为它. 在酷孩子闲逛的论坛(Hacker News,Reddit等)中反复出现的偏见与Java语言背道而驰. 人们常常反复感叹 J ...

  8. 相对论或能解释为什么中微子速度比光快

    相对论或能解释为什么中微子速度比光快 blackhat 发表于 2011年10月07日 14时00分 星期五         来自翘曲部门 两周前,CERN的物理学家宣布OPERA试验发现中微子传播速 ...

  9. java比go难学_为什么Go比Java快这么多?看完这个例子就懂

    一,前言 本次小测试并不是试图说明Go是java的替代,Go lang和Java本就不是实现相同类型任务的语言 :Java是企业开发语言,而Go是系统编程语言.为什么Go比Java快这么多?看完这个例 ...

最新文章

  1. centos java yum_CentOS7 使用yum命令安装Java SDK
  2. 自动驾驶软件工程之目标检测以及传感器融合
  3. 【1863】畅通工程 (HDU)
  4. Linux的三种特殊权限
  5. boost::has_range_iterator相关的测试程序
  6. windows下配置opencv
  7. 参赛方案-主机托管、中小企业虚拟化应用
  8. vue-router 路由嵌套显示不出来_45. Vue路由vuerouter的基本使用
  9. 图表 stack属性_想快速了解MEAN Stack吗? 这是带有有用图表的文档。
  10. mysql 导出csv命令_MySQL 导出数据到csv文件的命令
  11. linux source多个文件夹,linux下source命令使用详解
  12. 阿里工程师手把手教你设计 B 端垂类营销中心!
  13. 新产品Wyn Enterprise 详解,立即预约公开课
  14. CentOS设置时间
  15. @RunWith报错/SpringJUnit4ClassRunner报错或无法使用
  16. xp系统安装ftp服务器,xp系统安装ftp服务器
  17. 【ManageEngine】OpManager 2022用户体验报告
  18. 计算机蓝屏代码0x0000007b,解决电脑蓝屏出现代码0x0000007b怎么解决
  19. 如何清除服务器错误文档,如何删除Windows错误报告文件
  20. 电脑鼠标不管用但键盘可以用怎么办

热门文章

  1. OpenVINO 2020版没有cpu_extension.dll问题解决
  2. SQL基础语法与规则
  3. JMeter和JMeterPlugin 下载安装
  4. 数学图形(2.23)Cylindric sine wave柱面正弦曲线
  5. Split字符串分割函数
  6. 使用vs测试时的问题
  7. linux常用svn命令
  8. C语言长度为0的数组
  9. UA OPTI544 量子光学13 场的量子化描述
  10. UA SIE545 优化理论基础1 例题3 凸多面体的表示与线性规划