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

#include <iostream>
#include <iomanip>
#include <vector>
#include <algorithm>
#include <numeric>
#include <functional>
#include <cmath>
#include <queue>
#include <stack>
#include <string>
#define REP(i, n) for(int i = 0; i < n; i++)
#define REPR(i, n) for(int i = n; i >= 0; i--)
#define FOR(i, m, n) for(int i = m; i < n; i++)
#define INF 2e9
#define IPSILON 1e-9
#define ALL(v) v.begin(), v.end()
using namespace std;
typedef long long ll;

ll gcd(ll m, ll n){
  ll temp;
  while(m % n != 0){
    temp = n;
    n =	m %n;
    m =	temp;
  }
  return n;
}

ll lcm(ll m, ll n){
  return m * n / gcd(m,n);
}
int main()
{
  ll A,B,C,D;
  cin >> A >>B >>C >> D;
  ll lcmNum = lcm(C,D);
  //  cout <<"lcm " << lcmNum << endl;                                                                                           
  ll countC= 0;
  ll countD = 0;
  ll countLcm = 0;
  countC = B/C - A/C +1;
  countD = B/D - A/D +1;
  countLcm = B/lcmNum	- A/lcmNum + 1;
  // for(int i = A; i <= B;i++){                                                                                                 

  //   if(i % C == 0) countC+=1;                                                                                                 
  //   if(i % D == 0) countD+=1;                                                                                                 
  //   if(i % lcmNum == 0) countLcm+=1;                                                                                          
  // }                                                                                                                           

  cout << B- A+1 - (countC+countD - countLcm) << endl;
  return 0;
}