https://coderun.yandex.ru/problem/postcard-equation/description Средняя

Решение

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