Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- /* Bogdan Iordache
- * O(logVMAX)
- */
- #include <bits/stdc++.h>
- using namespace std;
- int main() {
- #ifndef LOCAL
- ifstream cin("abk1k2.in");
- ofstream cout("abk1k2.out");
- #endif
- int a, b, k1, k2;
- cin >> a >> b >> k1 >> k2;
- assert(1 <= a && a <= b && b <= 1000000000);
- assert(2 <= k1 <= k2 <= 1000000000);
- long long cnt_k1 = b / k1 - (a - 1) / k1;
- long long cnt_k2 = b / k2 - (a - 1) / k2;
- long long cnt = cnt_k1 * (cnt_k1 - 1) / 2 + cnt_k2 * (cnt_k2 - 1) / 2;
- long long cmmmc = 1LL * k1 * k2;
- while (k1) {
- int r = k2 % k1;
- k2 = k1;
- k1 = r;
- }
- cmmmc /= k2;
- long long cnt_cmmmc = b / cmmmc - (a - 1) / cmmmc;
- cnt -= cnt_cmmmc * (cnt_cmmmc - 1) / 2;
- cout << cnt << '\n';
- return 0;
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement