文章目录
1. 题目描述
1.1. Limit
Time Limit: 1000 ms
Memory Limit: 131072 kB
1.2. Problem Description
读入 N N N,求出 1.. N 1..N 1..N的范围内所有 2 2 2或 3 3 3或 5 5 5的倍数一共有多少个?
1.3. Input
输入一个数 N N N
1.4. Output
输出一个数,表示这样的数的个数
1.5. Sample Input
10
1.6. Sample Output
8
1.7. Source
2. 解读
找出 [ 1 , n ] [1, n] [1,n]范围内 2 、 3 、 5 2、3、5 2、3、5的倍数,为去除重复计数,减去他们两两组合构成的共同的倍数,即 [ 1 , n ] [1, n] [1,n]范围内 6 、 10 、 15 6、10、15 6、10、15的倍数。
因为减去了两两组合的倍数,三个数字相乘的倍数,即 30 30 30的倍数被减掉了,所以再加上 30 30 30的倍数,即可得出答案。
3. 代码
#include <iostream>
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,有问题欢迎通过邮箱交流。


850

被折叠的 条评论
为什么被折叠?



