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: Accepted)

#include <stdio.h>

int main(){
  long a,b,c,d;
  long m;
  long a_C,a_D,a_M,b_C,b_D,b_M;
  long a_ans,b_ans;
  long x,y,tmp,r;
  scanf("%ld %ld %ld %ld",&a,&b,&c,&d);
  
  x = c;
  y = d;
  if(x < y){
    tmp = x;
    x = y;
    y = tmp;
  }
  r = x % y;
  while(r != 0){
    x = y;
    y = r;
    r = x % y;
  }
  m = (c * d) / y;
  
  a_C = (a-1) / c;
  a_D = (a-1) / d;
  a_M = (a-1) / m;
  a_ans = (a-1) - a_C - a_D + a_M;
  
  b_C = b / c;
  b_D = b / d;
  b_M = b / m;
  b_ans = b - b_C - b_D + b_M;
  
  printf("%ld\n",b_ans - a_ans);
  return 0;
  
}