题解
2024-07-29 22:01:15
发布于:湖南
62阅读
0回复
0点赞
对于这种小小小小小奥题,我一眼就能看出解法:
画个那啥忘了图
我们可以看出,求 中不能被 任何一个整除的只需减去中间那两个圆再加上重复的棕色部分就行了
(注意,棕色部分是 中能被 的最小公倍数整除的部分,而不是 )
int get(int n){
return n - n / a - n / b + n / (a * b / __gcd(a, b));
}
然后再学习前缀和思想,拿get(y)
再减去get(x-1)
就是答案了
#include <iostream>
#include <cstdio>
#include <algorithm>
#define int long long
using namespace std;
int n, m, a, b;
int get(int n){
return n - n / a - n / b + n / (a * b / __gcd(a, b));
}
signed main(){
cin >> m >> n >> a >> b;
cout << get(n) - get(m - 1);
return 0;
}
全部评论 2
韦恩图
2024-08-14 来自 上海
0原来不会爆ll......
本狗拜了(~_ _)ノ2024-07-29 来自 浙江
0本来就不会
2024-07-29 来自 湖南
0...
2024-07-29 来自 浙江
0你看这题的讨论
2024-07-29 来自 浙江
0
有帮助,赞一个