Решение
import java.io.BufferedReader
import java.io.BufferedWriter
import java.io.InputStreamReader
import java.io.OutputStreamWriter
// Подсчет количества различных простых делителей числа x
fun primeDivisorsCount(x: Long): Int {
var num = x
var count = 0
if (num % 2 == 0L) { // Проверка делимости на 2
count++
while (num % 2 == 0L) num /= 2
}
var i = 3L
while (i * i <= num) { // Проверка нечетных делителей
if (num % i == 0L) {
count++
while (num % i == 0L) num /= i
}
i += 2
}
if (num > 1) count++ // Остаток - простой делитель
return count
}
// Подсчет количества решений уравнения x + p(x) = n
fun countSolutions(n: Long): Int {
var count = 0
for (k in 0..60) { // Ограничение по количеству простых делителей
val x = n - k
if (x <= 0) break // x должен быть положительным
if (primeDivisorsCount(x) == k) count++ // Проверка условия уравнения
}
return count
}
fun main(args: Array<String>) {
val reader = BufferedReader(InputStreamReader(System.`in`))
val writer = BufferedWriter(OutputStreamWriter(System.out))
val n = reader.readLine().toLong() // Чтение числа n
val result = countSolutions(n) // Подсчет решений
writer.write(result.toString()) // Вывод результата
writer.newLine()
reader.close()
writer.close()
}