Решение
import java.io.BufferedReader
import java.io.BufferedWriter
import java.io.InputStreamReader
import java.io.OutputStreamWriter
import kotlin.math.sqrt
// Функция для нахождения НОД двух чисел
private fun gcd(a: Long, b: Long): Long {
var x = a
var y = b
while (y != 0L) {
val temp = y
y = x % y
x = temp
}
return x
}
fun main() {
val reader = BufferedReader(InputStreamReader(System.`in`))
val writer = BufferedWriter(OutputStreamWriter(System.out))
// Читаем входные данные
val (x, y) = reader.readLine().split(" ").map(String::toLong)
// Проверяем, делится ли y на x (т.к. НОК(x, y) = (p * q) / НОД(p, q))
if (y % x != 0L) {
writer.write("0")
writer.newLine()
writer.flush()
reader.close()
writer.close()
return
}
val k = y / x // Ищем множители числа k
var count = 0L
// Перебираем все делители числа k
for (p in 1..sqrt(k.toDouble()).toLong()) {
if (k % p == 0L) {
val q = k / p
if (gcd(p, q) == 1L) { // Проверяем, что числа взаимно простые
count += if (p == q) 1 else 2 // Считаем обе пары (p, q) и (q, p)
}
}
}
writer.write(count.toString())
writer.newLine()
writer.flush()
reader.close()
writer.close()
}