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.Linq;
using System.Collections.Generic;

class Program
{
    public static void Main()
    {

        var line = Console.ReadLine().Split(' ').Select(x => long.Parse(x)).ToArray();
        long A = line[0];
        long B = line[1];
        long C = line[2];
        long D = line[3];

        //ユークリッドの互除法　AとBの最大公約数を求める
        bool p = true;
        long k = 0; //最大公約数k
        long Q = Math.Max(C, D); //割られる数
        long R = Math.Min(C, D); //割る数

        while (p)
        {
            //「割られる数」/「割る数」が割り切れたら、「割られる数」と「割る数」の最大公約数は「割る数」
            long n = Q % R; //余り
            if (n == 0)
            {
                k = R;
                p = false;
            }
            else
            {
                //「割られる数」に「割る数」をセット
                Q = R;
                //「割る数」に「余り」をセット
                R = n;
            }
        }

        long s =( C * D ) / k; //CとDの最小公倍数はC*D/CとDの最大公約数

        Console.WriteLine((B - A + 1) - ((B / C - (A - 1) / C) + (B / D - (A - 1) / D) - (B / s - (A - 1) / s)));
    }

}