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;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

namespace ABC131
{
    class C
    {
        static void Main(string[] args)
        {

            long[] a = Console.ReadLine().Split(' ').Select(v => long.Parse(v)).ToArray();
            long A = a[0], B = a[1], C = a[2], D = a[3];
            long CD = GetLeastCommonMultiple(C, D);

            long total = B - A + 1;
            long divC = Count(A, B, C);
            long divD = Count(A, B, D);
            long divCD = Count(A, B, CD);
            long s = total - divC - divD + divCD;
            Console.WriteLine(s);

        }

        static long Count(long x, long y, long d)
        {
            long a = x / d; long ma = x % d;
            long b = y / d; 

            long r = b - a;
            if (ma == 0) r++; 
            return r;
        }

        //最大公約数(Euclid互除法:O(log n)
        public static long GetGreatestCommonFactor(long x, long y)
        {
            while (x > 0 && y > 0)
            {
                if (x > y)
                {
                    x %= y;
                }
                else
                {
                    y %= x;
                }
            }
            return Math.Max(x, y);
        }

        //最小公倍数
        public static long GetLeastCommonMultiple(long x, long y)
        {
            long gcf = GetGreatestCommonFactor(x, y);
            long zz = y / gcf;
            return x * zz;
        }


    }
}