您的位置:首页 > 其它

[Project Euler]Problem 1:Multiples of 3 and 5

2014-01-12 18:58 417 查看
问题1:3和5的倍数

Published on Friday, 5th October 2001, 06:00 pm;

2001年10月5日 星期五 下午6:00发布

If we list all the natural numbers below 10 that are multiples of 3 or 5, we get 3, 5, 6 and 9. The sum of these multiples is 23.

Find the sum of all the multiples of 3 or 5 below 1000.

如果我们列出3或5倍数小于10的自然数,我们得到3,5,6和9。这些数字的总和是23。

找出小于1000的自然数3或5的倍数。

方法一:最简单的方法为循环1到1000并判断是否能整除3或5

1 uint Sum=0;
2 for(uint curNum=1;curNum<1000;curNum++)if(curNum%3==0 || curNum%5==0)
3 Sum+=curNum;


执行次数:999次;

方法二:如果每次分别进行相加,再去减掉公倍数

1 private uint CountNumSum(uint belowNum,uint uIntNum)
2 {
3     uint curSum = 0;
4     for (uint curNum = uIntNum; curNum < belowNum; curNum += uIntNum)
5     {
6         curSum += curNum;
7     }
8 }
9 uint Sum=0;
10 Sum=CountNumSum(1000,3)+CountNumSum(1000,5)-CountNumSum(15);


执行次数:333+199+66=598次

方法三:这个题目其实还有个最简便的方法,无需循环

1 private uint CountNumSum(uint belowNum,uint uIntNum)
2 {
3  return --belowNum / uIntNum * uIntNum * (1 + belowNum / uIntNum) /2;
4 }
5 uint Sum=0;
6 Sum=CountNumSum(1000,3)+CountNumSum(1000,5)-CountNumSum(1000,15);


毫无疑问,方法三的执行速度是最快的,不存在循环。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  Project Euler