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

#include <iostream>
#include <string>
#include <algorithm>
#include <vector>

using namespace std;

void swap(long long int& a, long long int& b) {
	long long int tmp;
	tmp = a;
	a = b;
	b = tmp;
}



long long int gcd(long long int c, long long int d) {

	if (c < d)swap(c, d);

	if (c % d == 0)return d;

	return (gcd(d, c % d));

}




int main() {

	long long int a, b, c, d;

	cin >> a >> b >> c >> d;


	long long int lcmcd;
	lcmcd = c * d / gcd(c, d);


	

	long long int n[6];

	n[0] = b / c;
	n[1] = b / d;
	n[2] = b / lcmcd;

	n[3] = (a - 1) / c;
	n[4] = (a - 1) / d;
	n[5] = (a - 1) / lcmcd;

	long long int ans = 0;

	ans = (b - n[0] - n[1] + n[2]) - ((a - 1) - n[3] - n[4] + n[5]);

	cout << ans << endl;

	return 0;

}