AT4237 [ABC131C] Anti-Division 题解

· · 题解

题意

给定 4 个整数 a,b,c,d。求 $a

## 思路 容斥原理。 容易得到,答案为 $b-a+1$ $-$ 能被 $c$ 整除的数的个数 $-$ 能被 $d$ 整除的数的个数 $+$ 能被 $c$ 和 $d$ 整除的数的个数。 部分用最小公倍数求即可。 ## 代码 ```cpp #include <bits/stdc++.h> using namespace std; #define int long long int a, b, c, d; int gcd(int x, int y) { if (!y) return x; else return gcd(y, x % y); } int lcm(int p, int q) { return p * q / gcd(p, q); } int ans = 0; signed main() { cin >> a >> b >> c >> d; ans = (b - a + 1) - (b / c - (a - 1) / c) - (b / d - (a - 1) / d) + (b / lcm(c, d) - (a - 1) / lcm(c, d)); cout << ans << endl; return 0; } ```