yuharu. так я і написав як. Чи не перебирати всі числа, а спочатку зрозуміти, яке повинно бути розкладання на прості числа (факторизація). А потім просто взяти перші кілька простих чисел - тоді буде мінімальне число.
Твоє шукане число представляється в a * a *. * A * b * b *. * B * c.
де a, b, c - це різні прості числа.
наприклад
2 * 2 * 3 * 5 * 5
Дане розкладання можна розділити навпіл декількома різними способами
| aabcc
a | aabcc
aa | bcc
ab | abcc
.
і т.д.
Число таких варіантів поділу - це твоє k
Тобі треба знайти такі послідовності aabbc, які дають тобі саме заданий число поділів.
Після цього, як у тебе з'явилося кілька претендентів на поділ
наприклад aabbc і abcd
ти замість букв підставляєш перші кілька простих чисел - і дивишся якийсь варіант дасть мінімальне число.
Чим більше разів буква зустрічається - тим менше просте число повинне відповідати їй.
Але все одно може бути доведеться перевірити кілька варіантів.
код я розмістив на сайті в графі програмування - з ++
tlito.ru/node/203
у вас неправильний код, лише з деякими числами проходить, перевірте і переконайтеся в цьому самі :)
я помітив що не працював з 1, виправив: додав один рядок в початок функції повірка якщо к = 1. а з якими ще не працює? код і прінсткрін новий тут tlito.ru/node/203