import java.math.BigInteger fun main(args: Array) = IO().exec { val t = long() val a = long() val b = long() val l = lcm(a, b) println(calc(t.toBigInteger(), a.toBigInteger()) + calc(t.toBigInteger(), b.toBigInteger()) - calc(t.toBigInteger(), l)) } fun calc(t: BigInteger, a: BigInteger): BigInteger { return (t - BigInteger.ONE) / a + BigInteger.ONE } fun gcd(a: Long, b: Long): Long = if (b == 0L) a else gcd(b, a % b) fun lcm(a: Long, b: Long): BigInteger = a.toBigInteger() / gcd(a, b).toBigInteger() * b.toBigInteger() // region template operator fun Int.iterator() = 0.until(this).iterator() class IO { val printable = 33..126 val buffer = ByteArray(1024) var ptr = 0 var buflen = 0 val out = java.io.PrintWriter(System.out) fun hasNextByte(): Boolean = if (ptr < buflen) true else { ptr = 0 buflen = System.`in`.read(buffer) buflen > 0 } fun readByte(): Byte = if (hasNextByte()) buffer[ptr++] else -1 fun hasNext(): Boolean { while (hasNextByte() && buffer[ptr] !in printable) ptr++ return hasNextByte() } fun string(): String { if (!hasNext()) throw java.util.NoSuchElementException() val sb = StringBuilder() var b = readByte() while (b in printable) { sb.appendCodePoint(b.toInt()) b = readByte() } return sb.toString() } fun long(): Long { if (!hasNext()) throw java.util.NoSuchElementException() var n = 0L var minus = false var b = readByte() if (b == '-'.toByte()) { minus = true b = readByte() } if (b !in '0'.toByte()..'9'.toByte()) { throw NumberFormatException() } while (true) { if (b in '0'.toByte()..'9'.toByte()) { n *= 10 n += b - '0'.toByte() } else if (b == (-1).toByte() || b !in printable) { return if (minus) -n else n } else { throw NumberFormatException() } b = readByte() } } fun int(): Int { val nl = long() if (nl !in Integer.MIN_VALUE..Integer.MAX_VALUE) throw NumberFormatException() return nl.toInt() } fun double(): Double = string().toDouble() fun print(obj: Any) = out.print(obj) fun print(i: Int) = out.print(i) fun print(l: Long) = out.print(l) fun println(obj: Any) = out.println(obj) fun println(i: Int) = out.println(i) fun println(l: Long) = out.println(l) inline fun exec(block: IO.() -> Unit) { block() out.flush() } inline fun println(block: IO.() -> Any) { println(block()) out.flush() } } // endregion