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 (GCC 5.4.1) (judge verdict: Wrong Answer)

#include <stdio.h>
#include <stdbool.h>
#include <math.h>
#define int long

int main(void){
    long A, B, C, D;
    long real;
    long cdv;
    bool result = false;
    do {
        scanf("%ld", &A);
        scanf("%ld", &B);
        scanf("%ld", &C);
        scanf("%ld", &D);
        if ((1 <= A && A <= B && B <= pow(10,18.0)) && (1 <= C) && (D <= pow(10, 9.0))){
            result = true;
        }
    }while(result == false);
    int add = B - A;
    int addC = add / C;
    int addD = add / D;
    int c = C;
    int d = D;
    do {
        real = d % c;
        cdv = c;
        d = c;
        c = real;
    }while(real != 0);

    int cdvc = C / cdv;
    int cdvd = D / cdv;
    int lcm = cdv * cdvc * cdvd;
    int addl = add / lcm;
    int want = add - (addC + addD -addl);

    printf("%ld\n",want);
        return 0;
}