Ограничения: время – 2s/4s, память – 256MiB Ввод: input.txt или стандартный ввод Вывод: output.txt или стандартный вывод 
Послать решение Blockly Посылки Темы Где Обсудить (0)
Вася – юный программист. Он уже умеет решать задачи на графы, структуры данных, комбинаторику и динамическое программирование.
Но вот с теорией чисел он еще не знаком. Поэтому он стал посещать лекции по теории чисел. На одном из первых занятий он узнал,
что такое наименьшее общее кратное.
Набором чисел назовем множество, в котором элементы могут повторяться.
Наименьшее общее кратное набора S целых положительных чисел – минимальное положительное целое число,
которое делится на каждый элемент набора S.
После каждого занятия преподаватель задает домашнее задание по пройденным темам. Вот и в этот раз он задал непростое задание:
Заданы числа n и k, требуется определить количество таких наборов из k элементов, наименьшее общее кратное которых равно n.
Например, если n и k\ =\ 2, то подходящие наборы это: {1,\ 6}, {2,\ 3}, {2,\ 6},
{3,\ 6}, {6,\ 6}. Поэтому ответ будет равен 5. Заметим, что наборы, отличающиеся только порядком элементов,
считаются одинаковыми.
Вася очень хорошо усвоил лекцию, а также он очень смышленный мальчик, поэтому он уже решил задачу. Но он не уверен в том, что все
сделал правильно. Вася просит вас помочь проверить его программу: решите эту же задачу и найдите ответы на некоторые тесты.
Так как ответ может быть очень большим, Вася решил, что ему достаточно знать остаток от деления ответа на 10^9+7.
В первой строке входного файла через пробел заданы числа n (1\ ≤\ n\ ≤\ 10^{12}) и k (1\ ≤\ k\ ≤\ 100).
В выходной файл требуется вывести одно число: ответ по модулю 10^9+7.
Источник: neerc.ifmo.ru/school