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 PHP (5.6.30) (judge verdict: Wrong Answer)

    const INPUT_DELIMITER = " ";

    // 最小公倍数を求める
    function getLCM ($a, $b) {
        return $a * $b / getGCM($a, $b);
    }

    // 最大公約数を求める
    function getGCM ($a, $b) {
        if ($a < $b) {
            list($min, $max) = [$a, $b];
        } else {
            list($min, $max) = [$b, $a];
        }

        $mod = $max % $min;
        if ($mod === 0) {
            return $min;
        }

        return getGCM($min, $mod);
    }

    // 入力
    $input = fgets(STDIN);
    $inputArray = explode(INPUT_DELIMITER, $input);

    $A = $inputArray[0];
    $B = $inputArray[1];
    $C = $inputArray[2];
    $D = $inputArray[3];

    
    // CとDの公倍数
    $CD = getLCM($C, $D);

    $range = $B - $A;
    // 割り切れないものの個数
    $countC = floor($range / $C);
    $countD = floor($range / $D);
    $countCD = floor($range / $CD);

    // 
    $count = bcsub($range , ($countC + $countD - $countCD));

    echo $count;