文章目录

1. 题目描述

1.1. Limit

Time Limit: 1000 ms

Memory Limit: 131072 kB

1.2. Problem Description

读入 NNN,求出 1..N1..N1..N的范围内所有 222或 333或 555的倍数一共有多少个?


1.3. Input

输入一个数 NNN


1.4. Output

输出一个数,表示这样的数的个数


1.5. Sample Input

10 

1.6. Sample Output

8 

1.7. Source

51Nod 2409 启蒙练习-倍数的个数


2. 解读

找出 [1,n][1, n][1,n]范围内 2、3、52、3、52、3、5的倍数,为去除重复计数,减去他们两两组合构成的共同的倍数,即 [1,n][1, n][1,n]范围内 6、10、156、10、156、10、15的倍数。

因为减去了两两组合的倍数,三个数字相乘的倍数,即 303030的倍数被减掉了,所以再加上 303030的倍数,即可得出答案。

3. 代码

#include  using namespace std; int main() { long long n; // 读入n scanf("%lld", &n); // 找出[1, n]范围内2、3、5的倍数 long long nDivBy2 = n / 2l; long long nDivBy3 = n / 3l; long long nDivBy5 = n / 5l; // 找出[1, n]范围内6、10、15、30的倍数 long long nDivBy6 = n / 6l; long long nDivBy10 = n / 10l; long long nDivBy15 = n / 15l; long long nDivBy30 = n / 30l; long long ans = nDivBy2 + nDivBy3 + nDivBy5 - nDivBy6 - nDivBy10 - nDivBy15 + nDivBy30; // 输出 printf("%lld\n", ans); } 

联系邮箱:curren_wong@163.com

Github:https://github.com/CurrenWong

欢迎转载/Star/Fork,有问题欢迎通过邮箱交流。