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

时间:2023-01-27 17:03:07

问题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(15);

毫无疑问,方法三的执行速度是最快的,不存在循环。