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;
class Program
 {
        static void Main(string[] args)
        {
    　　UInt64 A,B,C,D;
            string[] str = Console.ReadLine().Split(' ');//2つ以上のスペース区切り入力の取得
            A = UInt64.Parse(str[0]);  //数値で受け取りたい場合は変換する
            B = UInt64.Parse(str[1]);
            C = UInt64.Parse(str[2]);  //数値で受け取りたい場合は変換する
            D = UInt64.Parse(str[3]);
          if(C == 1 || D == 1)
          {
            Console.WriteLine("0");
            return;
          }
            UInt64 m = 1;
            UInt64 val = 2;
            UInt64 tmpC = C;
            UInt64 tmpD = D;
            do
            {
              if(tmpC % val == 0 && tmpD % val == 0)
              {
                tmpC /= val;
                tmpD /= val;
                m *= val;
              }
              else
              {
                val++;
              }
              if(tmpC == 1 || tmpD == 1)
              {
                break;
              }
            }while(val <= Math.Sqrt(Math.Max(C,D)));

            m = m * tmpC * tmpD;
            if(m != 1)
            {
              UInt64 X1 = B - (B / C + B / D - B / m);
              UInt64 X2 = (A-1) - ((A-1) / C + (A-1) / D - (A-1) / m);
              Console.WriteLine(X1-X2);
            }
            else
            {
              UInt64 X1 = B - (B / C + B / D);
              UInt64 X2 = (A-1);
              Console.WriteLine(X1-X2);
            }
        }
 }