免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
楼主: xyfree
打印 上一主题 下一主题

删帖吧 [复制链接]

论坛徽章:
0
61 [报告]
发表于 2010-06-25 08:53 |只看该作者
回复 59# mgqw

for( i=1; i<=n; ++i )
{
    for( j=i; j<=n; j+=i )

注意我的内层循环。

论坛徽章:
0
62 [报告]
发表于 2010-06-25 08:58 |只看该作者
回复 61# 没本

我的内层和你区别大吗???{:3_201:}
#         for( i=1; i<101; i++ )
#                 for( j=i; j<101; j++)

论坛徽章:
0
63 [报告]
发表于 2010-06-25 09:10 |只看该作者
回复 62# mgqw


    差很多啊,n=100就比你的快好几倍,而且我没有if( j%i==0 )的分支预测失败问题,还少做了除法。n=1000000我的程序可以一秒之内出结果的。而那时你的就不只是慢了一点了。

论坛徽章:
0
64 [报告]
发表于 2010-06-25 09:14 |只看该作者
回复 63# 没本

   你是<=100,我是<101,这个是没有区别的{:3_196:}
   主要的还是你没有if( j%i==0 )分支判断,确实要快很多,不过你这样的算法对我这样数学不怎么样的人看起来太费力了。
   我的相对直观容易看懂。

论坛徽章:
0
65 [报告]
发表于 2010-06-25 09:21 |只看该作者
回复 64# mgqw


    我调整循环步长来开关灯,很符合题目原意吧。

论坛徽章:
0
66 [报告]
发表于 2010-06-25 09:25 |只看该作者
回复 65# 没本


     主要是这句话太精髓了 li[j] ^= 1;  完全不用题意的判断是否能被整除,
     我就是老实按照题意判断是否能被整除,能的话就拨开关

论坛徽章:
0
67 [报告]
发表于 2010-06-25 09:27 |只看该作者
回复 66# mgqw


    我晕,你还没看见啊步长不一样啊。我改一下循环的写法。

for( i=1; i<=n; ++i )
{
    for( j=i; j<=n; j = j + i/*这里不是j++*/ )

论坛徽章:
0
68 [报告]
发表于 2010-06-25 09:30 |只看该作者
本帖最后由 没本 于 2010-06-25 09:55 编辑

回复 66# mgqw


     我25楼就说了对循环次数优化了。你的循环是 100+99+98+..+1次,我的是100+50+33+..+2+2+..+1+1  (50个1) 次

论坛徽章:
0
69 [报告]
发表于 2010-06-25 09:49 |只看该作者
本帖最后由 mgqw 于 2010-06-25 09:51 编辑

看到了,这个优化确实很好,减少循环次数的同时,去掉了判断

论坛徽章:
0
70 [报告]
发表于 2010-06-25 10:00 |只看该作者
本帖最后由 guoruimin 于 2010-06-25 10:07 编辑

这其实是个口算题!暴破的再高明也是暴破!
看 55 楼
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

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

清除 Cookies - ChinaUnix - Archiver - WAP - TOP