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# (Mono 4.6.2.0) (judge verdict: Accepted)

using System;
using System.Collections.Generic;

namespace cs
{
    public class Program
    {
        public static void Main(string[] args)
        {
            
            var input = Array.ConvertAll(Console.ReadLine().Split(' '), long.Parse);
            var inputMin = input[0];
            var inputMax = input[1];
            var divA = input[2];
            var divB = input[3];
            var divC = (divA > divB) ? LCD(divB, divA) : LCD(divA, divB);

            var range = inputMax - inputMin + 1;
            long divACount;
            long divBCount;
            long divCCount;

			divACount = (inputMax / divA) - (inputMin / divA);
            if(inputMin % divA==0){
                divACount +=1;
            }
			divBCount = (inputMax / divB) - (inputMin / divB);
            if(inputMin % divB==0){
                divBCount +=1;
            }
			divCCount = (inputMax / divC) - (inputMin / divC);
            if(inputMin % divC==0){
                divCCount +=1;
            }

            Console.WriteLine(range - (divACount + divBCount - divCCount));

        }

        public static long GCD(long n, long m){
            
            if(m % n == 0) return n;
            else return GCD(m%n, n);

        }

        public static long LCD(long n, long m){

            return m * n / GCD(n,m);
        }
    }
}