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>

int main(void){

  double a, b;
  double y;
  long int c, d;
  long int a_c, a_d, b_c, b_d, a_z, b_z, u;
  long int ans = 0;
  long int ans_r = 0;
  long int temp = 0;
  long int r, x, j, k;
  long int temp_c, temp_d;
  scanf("%lf %lf %ld %ld", &a, &b, &c, &d);

  y = c * d;

  if(c < d){
   temp = c;
   c = d;
   d = temp;
 }

 temp_c = c;
 temp_d = d;

j = c/d;
r = c - j*d;


 while(r != 0){
   c = d;
   d = r;
   j = c/d;
   r = c - j*d;
 }


 x = y / (double)d;
u = x;

  a_c = a / temp_c;
  b_c = b / temp_c;
  a_d = a / temp_d;
  b_d = b / temp_d;
  a_z = a / x;
  b_z = b / x;

  if(a_c * temp_c != a){
    a_c =  a_c + 1.0;
  }
  if(a_d * temp_d != a){
    a_d = a_d + 1.0;
  }
  if(a_z * x != a){
    a_z = a_z + 1.0;
  }

  ans = b_c - a_c + 1.0 + b_d - a_d + 1.0 - (b_z - a_z + 1.0);

  ans_r = b - a + 1.0 - ans;

  printf("%ld\n", ans_r);

  return 0;
}