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 Scala (2.11.7) (judge verdict: Wrong Answer)

import scala.io.{StdIn => in}

object Main extends App {
  val Array(a, b, c, d) = in.readLine.split(" ").map(_.toLong)

  val a1 = b / c
  val a2 = a / c
  val b1 = b / d
  val b2 = a / d

  val a3 = a1 - a2
  val b3 = b1 - b2

  def gcd(a:Long, b:Long):Long = {
    if(b == 0) a
    else gcd(b, a%b)
  }

  val lcm = c * d / gcd(c, d)

  val c1 = b / lcm
  val c2 = a / lcm

  val c3 = c1 - c2

  val t = a match {
    case x if a % c == 0 && a % d == 0 && a % lcm == 0 => 3
    case x if a % c == 0 && a % d == 0 => 2
    case x if a % c == 0 && a % lcm == 0 => 2
    case x if a % lcm == 0 && a % d == 0 => 2
    case x if a % c == 0 || a % d == 0 || a % lcm == 0 => 1
    case _ => 0
  }
  debug(a3, b3, c3, lcm, t, b-a)
  val ans = if(c == 1 || d == 1) 1 + a - b else ((1 + b - a - t) - (a3 + b3 - c3)) max 0
  println(ans)

  def debug(any:Any*):Unit = {
    if(this.getClass.toString != "class Main$")
      println(any.mkString(" "))
  }
}