Excel精英培训网

 找回密码
 注册
数据透视表40+个常用小技巧,让你一次学会!
查看: 4424|回复: 24

[VBA] 用VBA解欧拉计划题目(1)

[复制链接]
发表于 2017-10-31 15:19 | 显示全部楼层 |阅读模式
    前段时间痴迷解欧拉计划题目,一个多月来,陆陆续续解了100多题。乐在其中,不能自拔。        欧拉计划是一系列有挑战性的数学与计算机编程题;要解开它们,需要的不止是数学知识:尽管数学能够帮助你找到一些优雅而有效的方法,大多数题目仍需要借助计算机和编程技巧来完成解答。


    创立欧拉计划的初衷,以及不断维持其运行的动力,在于为好奇的头脑提供一个平台,使他们能够在有趣愉悦的氛围中,探索未知领域,学习新的知识。
    欧拉计划的题目难度不一,对于大多数人来说,解题就是一个逐渐学习的过程。也就是说,每当你解开一个题目,你将会了解一些新的知识,从而帮助你着手解决以前无从下手的题目。因此,任何有决心的参与者,即使进展再缓慢,也一定能逐一解开每一道题。
    感觉用BASIC处理纯数学问题非常弱,网站用Python和Java的人最多。但用Basic的也有解了500+的大牛存在。
    有兴趣的可以去自行解题http://pe-cn.github.io/,英语过关的可以直接去原网站 https://projecteuler.net/archives 注册登录刷成就。
    先上第一题及代码。
3的倍数和5的倍数
如果我们列出10以内所有3或5的倍数,我们将得到3、5、6和9,这些数的和是23。
求1000以内所有3或5的倍数的和。

  1. Sub problem1()  '累加1000以下所有3或5的倍数(结果为233168)
  2.     tm = Timer
  3.     Nmax = 999
  4.     For i = 1 To Nmax
  5.         If i Mod 3 = 0 Or i Mod 5 = 0 Then s = s + i
  6.     Next
  7.     Debug.Print s, Timer - tm
  8. End Sub
  9. Sub problem1a()  '当nmax巨大时,比上面代码速度提高10倍
  10.     tm = Timer
  11.     Nmax = 999
  12.     For i = 3 To Nmax Step 3
  13.         s = s + i
  14.     Next
  15.     For i = 5 To Nmax Step 5
  16.         s = s + i
  17.     Next
  18.     For i = 15 To Nmax Step 15
  19.         s = s - i
  20.     Next
  21.     Debug.Print s, Timer - tm
  22. End Sub
复制代码




excel精英培训的微信平台,每天都会发送excel学习教程和资料。扫一扫明天就可以收到新教程
发表于 2017-10-31 15:31 | 显示全部楼层
回复

使用道具 举报

发表于 2017-10-31 16:20 | 显示全部楼层
这个还要快一点。
显然第2种算法还有多余浪费。

  1. Sub test3(n&)
  2.     Dim i&, s&
  3.     For i = 3 To n Step 3
  4.         s = s + i
  5.     Next
  6.     For i = 5 To n Step 15
  7.         s = s + i
  8.     Next
  9.     For i = 10 To n Step 15
  10.         s = s + i
  11.     Next
  12. End Sub
复制代码

评分

参与人数 1 +12 收起 理由
苏子龙 + 12 我和小伙伴都惊呆了,还快了不少!

查看全部评分

回复

使用道具 举报

发表于 2017-10-31 16:30 | 显示全部楼层
难道不能用数列公式吗?当然不懂“欧拉计划”哈
回复

使用道具 举报

发表于 2017-10-31 16:48 | 显示全部楼层
我就想知道一下如果需要3个数的倍数(比如3、5、7)时,用下面那种方法应该如何操作。
回复

使用道具 举报

 楼主| 发表于 2017-10-31 16:51 | 显示全部楼层
香川群子 发表于 2017-10-31 16:20
这个还要快一点。
显然第2种算法还有多余浪费。

欢迎大神出手。。。。后续还有很多。我自己琢磨的算法很慢,需要大神改进。
欧拉计划的基本要求是,所有题目都要在1分钟内计算出结果。后面有道题我运行了2个小时才出结果。
回复

使用道具 举报

 楼主| 发表于 2017-10-31 16:52 | 显示全部楼层
大灰狼1976 发表于 2017-10-31 16:48
我就想知道一下如果需要3个数的倍数(比如3、5、7)时,用下面那种方法应该如何操作。

3的倍数+5的倍数+7的倍数-15的倍数-21的倍数-35的倍数。。。。。。
回复

使用道具 举报

 楼主| 发表于 2017-10-31 16:53 | 显示全部楼层
欢迎大家讨论,精益求精,追求极致。前期的题目比较简单,没有什么提升空间。后续还有很多难题,有得烧脑子的。
回复

使用道具 举报

发表于 2017-10-31 17:15 | 显示全部楼层
grf1973 发表于 2017-10-31 16:52
3的倍数+5的倍数+7的倍数-15的倍数-21的倍数-35的倍数。。。。。。

我刚才就是这样做的,但是结果跟上面一种方法的结果不一样,可能我哪里弄错了吧,我再试试。
回复

使用道具 举报

 楼主| 发表于 2017-10-31 19:23 | 显示全部楼层
呃,还得减去多算的3*5*7的倍数。貌似多算了两次。。。。。
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

本版积分规则

小黑屋|手机版|Archiver|Excel精英培训 ( 豫ICP备11015029号 )

GMT+8, 2024-5-7 13:04 , Processed in 0.416131 second(s), 11 queries , Gzip On, Yac On.

Powered by Discuz! X3.4

Copyright © 2001-2020, Tencent Cloud.

快速回复 返回顶部 返回列表