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;
}