https://coderun.yandex.ru/problem/gcd-and-lcm-yandex/description Легкая

Решение

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()
}