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 JavaScript (node.js v5.12) (judge verdict: Runtime Error)

const main = input => {
    input = input[0].split(' '),a = BigInt(input[0]),b = BigInt(input[1]),c = BigInt(input[2]),d = BigInt(input[3]);
    const euclid = (x,y) => {
        while(1) {
            if (x == 0n) return y;
            if (y == 0n) return x;
            if (x>y) x = x%y;
            else if (y>x) y = y%x; 
            else return x;            
        }
    };
    let l = BigInt(c*d/euclid(c,d));
    // console.log(l);
    let asum = BigInt(a-BigInt(1)-(a-BigInt(1))/c-(a-BigInt(1))/d+(a-BigInt(1))/l);
    let bsum = BigInt(b-b/c-b/d+b/l);
    // console.log(bsum-asum);
    let ans = (bsum-asum)+'';
    console.log(ans);
};
main(require("fs").readFileSync("/dev/stdin", "utf8").split('\n'));