Problem 1 : Multiples of 3 and 5

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/Ruger008/article/details/79954013

Problem 1


Multiples of 3 and 5

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的倍数,我们将得到3、5、6和9,这些数的和是23。

求1000以内所有3或5的倍数的和。


题目解答

    朴素解法:暴力枚举(需要考虑既能被3整除又能被5整除的数字只需要加一次,利用容斥原理可以解决这个问题)

    优化算法:

        我们我们通过图片可以观察出 3和5所有重叠的数字都是是3和5的最小公倍数的倍数,也就是15的倍数,所以我们只需要将3的倍数和与5的倍数和相加并减去15的倍数和即可。

           

    在这里我们完全不必暴力枚举,利用等差数列求和公式即可解决这个问题:

    等差数列求和公式推导:

                      

                    

                    

                      

    我们可以通过数学归纳法再次进行证明,这里就不多介绍了。

题目代码

#include <stdio.h>
#include <inttypes.h>
int32_t main() {
    int32_t sum_3 = (999 / 3) * (3 + (999/3) *3) / 2;
    int32_t sum_5 = (999 / 5) * (5 + (999/5) *5) / 2;
    int32_t sum_15 = (999 / 15) * (15 + (999 / 15) * 15) / 2;
    printf("%" PRId32 "\n",sum_3 + sum_5 - sum_15);
    return 0;
}

        

阅读更多
想对作者说点什么?

博主推荐

换一批

没有更多推荐了,返回首页