1

Тема: Количество разложений числа на множители N<=2*10^9

Дано число N в пределах до двух миллиардов.
Определить сколько есть разложений числа на множители.
6 = 2 * 3
6 = 3 * 2
являются одинаковыми разложениями.

так для числа 12 все разбиения будут
2*6
2*2*3
3*4

для числа 30 разбиения будут
2*3*5
2*15
3*10
5*6

По заданному N определить количество разбиений.
Какие идеи к решению задачи?
Первое что приходит на ум - разложить на простые множители, а далее писать рекурентную формулу с запоминанием результатов.
Но все как то муторно.

Есть проще и изящнее решения?

2

Re: Количество разложений числа на множители N<=2*10^9

В первую очередь надо разложить число на простые множители. Время за O(sqrt(N))
И получится что-то вот такое:

p1^a1 * p2^a2 * ... pk^ak, где pi - это i-тое простое число
Ответом будет (a1+1)*(a2+1)*...(ak+1)

Например, если N=100, то 100 = 2^2 * 5^2, и ответ = (2+1)*(2+1) = 3*3 = 9.
Вот и все
Можете http://acmp.ru/index.asp?main=solution&id_task=171 посмотреть

3

Re: Количество разложений числа на множители N<=2*10^9

aza_inf пишет:

И получится что-то вот такое:

p1^a1 * p2^a2 * ... pk^ak, где pi - это i-тое простое число
Ответом будет (a1+1)*(a2+1)*...(ak+1)

Например, если N=100, то 100 = 2^2 * 5^2, и ответ = (2+1)*(2+1) = 3*3 = 9.

нет. эта формула дает КОЛИЧЕСТВО ДЕЛИТЕЛЕЙ ЧИСЛА.
А оно не совпадает с количеством разбиений.
у числа 30 разбиений 4 (если включать еще вариант 1*30 то 5 разбиений) а делителей 8 (включая 1 и 30)

4

Re: Количество разложений числа на множители N<=2*10^9

Ну с динамикой не всё хорошо по асимптотике, хотя есть подозрение, что всё же она должна укладываться в TL.

Дело в том, что динамика - фактически идёт по делителям заданного числа N, а т.к. N<=10^9, то по известной оценке число делителей будет в худшем случае в районе 1000.

Динамика видится такой: d[ i ][ j ] - количество разбиений числа i на множители, если разрешается брать только множители >=j. Без второго параметра не получается добиться того, чтобы 2*3 и 3*2 считались разными.
А переходы в динамике: мы перебираем число k как делитель i, больше либо равный j, и прибавляем к d[ i ][ j ] число d[i/k][k].

По асимптотике это куб, но во-первых там куб делить пополам, а во-вторых в сумме по всем i не может быть совсем уж много делителей, поэтому я верю, что это спокойно должно укладываться.

P.S. На самом деле, такое ощущение, что эту динамику можно сделать и за квадрат...

5

Re: Количество разложений числа на множители N<=2*10^9

ну собственно в первом посте я писал "рекурентную формулу с запоминанием результатов" что и подразумевало динамику.

Но меня интересует нет ли других путей.
Можетесть комбинаторная формула от набора простых делителей?

Т.е. формула зависимости ответа от степеней вхождения простых множителей в число

6

Re: Количество разложений числа на множители N<=2*10^9

Конечно, гадание - не лучший вариант, но вообще структура этой комбинаторной задачи выглядит достаточно сложной. Если бы порядок множителей был бы важен, то было бы более-менее понятно как решать.

Вообще, если даже N = p^k, т.е. простое в какой-то степени, то ответ - это число способов разбить k на слагаемые. А уже эта задача - достаточно "жёсткая" - обычно решается квадратной динамикой, есть довольно странная формула (выводимая с помощью производящих функций), позволяющая искать ответ за N sqrt(N).
В общем, даже в таком простом случае решение быстрее квадрата получить достаточно сложно, что уж говорить про общий случай...