Problem:
Score : 300 points

Problem Statement

You are given four integers A, B, C, and D. Find the number of integers between A and B (inclusive) that can be evenly divided by neither C nor D.

Constraints

1\leq A\leq B\leq 10^{18}

1\leq C,D\leq 10^9

All values in input are integers.

Input

Input is given from Standard Input in the following format:

A B C D

Output

Print the number of integers between A and B (inclusive) that can be evenly divided by neither C nor D.

Sample Input 1

4 9 2 3

Sample Output 1

2

5 and 7 satisfy the condition.

Sample Input 2

10 40 6 8

Sample Output 2

23

Sample Input 3

314159265358979323 846264338327950288 419716939 937510582

Sample Output 3

532105071133627368

Solution in C++14 (GCC 5.4.1) (judge verdict: Accepted)

#include <bits/stdc++.h>

using namespace std;

typedef long long int lli;

lli gcd(lli a, lli b) {
    if(a < b) return gcd(b, a);
    lli r;
    
    while ((r=a%b)) {
        a = b;
        b = r;
    }

    return b;
}

int main() {
    cin.tie(0);
    ios::sync_with_stdio(false);

    lli a, b, c, d;

    cin >> a >> b >> c >> d;

    lli c1 = a/c, c2 = b/c, d1 = a/d, d2 = b/d;
    c1 -= (a%c) ? 0 : 1;
    d1 -= (a%d) ? 0 : 1;

    lli cd = (c*d)/gcd(c, d), cd1 = a/cd, cd2 = b/cd;
    cd1 -= (a%cd) ? 0 : 1;

    cout << (b-a+1) - (c2-c1) - (d2-d1) + (cd2-cd1) << endl;
    // cout << b-a+1 << " " << c2-c1 << " " << d2-d1 << " " << cd2-cd1 << endl;

    return 0;
}