免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
123下一页
最近访问板块 发新帖
查看: 7350 | 回复: 25
打印 上一主题 下一主题

实验证明perl没有java,c快,不信看下面 [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2011-04-02 11:39 |只看该作者 |倒序浏览
9,91
1
20000000

找出1到20000000间能被9,91整除的数的总个数

java和c用了不到1000ms,perl用了
real    0m8.706s
user    0m6.993s
sys     0m0.004s

论坛徽章:
0
2 [报告]
发表于 2011-04-02 11:41 |只看该作者
算法啊,算法

论坛徽章:
1
2015年辞旧岁徽章
日期:2015-03-03 16:54:15
3 [报告]
发表于 2011-04-02 14:11 |只看该作者
是这样吗?
  1. $count = 0 ;
  2. for (1..20000000){
  3.         $count++ if ($_ % 9 == 0 && $_ % 91 == 0) ;
  4. }
  5. print $count."\n" ;
复制代码
24420

real    0m3.324s
user    0m3.320s
sys     0m0.000s

论坛徽章:
0
4 [报告]
发表于 2011-04-02 14:29 |只看该作者
本帖最后由 conn2011 于 2011-04-02 14:52 编辑

$count = int(20000000/(9*91));    {:3_203:}

论坛徽章:
1
2015年辞旧岁徽章
日期:2015-03-03 16:54:15
5 [报告]
发表于 2011-04-02 14:47 |只看该作者
$count = 20000000%(9*91);
conn2011 发表于 2011-04-02 14:29



    你这是特例,要是9和90就不能这样了

  1. #! /usr/bin/perl
  2. ($count,$j,$k) = (0,9,91) ;
  3. ($k,$j) = ($j,$k) if $k < $j ;
  4. $k = $k*$j if $k%$j != 0 ;
  5. for (1..20000000){
  6.         $_ % $k == 0 && $count++ ;
  7. }
  8. print $count."\n" ;
复制代码
感觉快了一些
24420

real    0m2.858s
user    0m2.856s
sys     0m0.000s

论坛徽章:
0
6 [报告]
发表于 2011-04-02 14:54 |只看该作者
回复 5# 昭襄王


    玩笑而已,但这确实是和算法有很大关系,如果你是实实在在的去循环个2000w次去运行几个命令行的话,怎么都快不了的

论坛徽章:
2
射手座
日期:2014-10-10 15:59:4715-16赛季CBA联赛之上海
日期:2016-03-03 10:27:14
7 [报告]
发表于 2011-04-02 14:54 |只看该作者
  1. $count = 0 ;
  2. $x = 0;
  3. while ($count<=20000000){
  4.        
  5.                 $count+=9*91 ;
  6.                 $x+=1;       
  7. }
  8. $x-=1;
  9. print $x."\n" ;
复制代码
  1. time perl count.perl
  2. 24420

  3. real    0m0.010s
  4. user    0m0.004s
  5. sys     0m0.006s
复制代码

论坛徽章:
46
15-16赛季CBA联赛之四川
日期:2018-03-27 11:59:132015年亚洲杯之沙特阿拉伯
日期:2015-04-11 17:31:45天蝎座
日期:2015-03-25 16:56:49双鱼座
日期:2015-03-25 16:56:30摩羯座
日期:2015-03-25 16:56:09巳蛇
日期:2015-03-25 16:55:30卯兔
日期:2015-03-25 16:54:29子鼠
日期:2015-03-25 16:53:59申猴
日期:2015-03-25 16:53:29寅虎
日期:2015-03-25 16:52:29羊年新春福章
日期:2015-03-25 16:51:212015亚冠之布里斯班狮吼
日期:2015-07-13 10:44:56
8 [报告]
发表于 2011-04-02 15:06 |只看该作者
慢点就慢点,这种问题单写的时间 C 都比 Perl 快,至少不用写 $ 了

论坛徽章:
1
2015年辞旧岁徽章
日期:2015-03-03 16:54:15
9 [报告]
发表于 2011-04-02 15:08 |只看该作者
回复 7# yinyuemi


    大大快了!
把计算放在外面会更快吗?
  1. ($x,$count,$j,$k) = (0,0,9,91) ;
  2. ($k,$j) = ($j,$k) if $k < $j ;
  3. $k = $k*$j if $k%$j != 0 ;
  4. while ($count<=20000000){
  5.         
  6.                 $count+=$k ;
  7.                 $x+=1;        
  8. }
  9. $x-=1;
  10. print $x."\n" ;
复制代码
24420

real    0m0.013s
user    0m0.008s
sys     0m0.000s

论坛徽章:
2
射手座
日期:2014-10-10 15:59:4715-16赛季CBA联赛之上海
日期:2016-03-03 10:27:14
10 [报告]
发表于 2011-04-02 15:11 |只看该作者
回复 9# 昭襄王


    测试了下,差别不大
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP