Добрый вечер.
Я решаю такую задачу, даны 10 чисел
Нужно определить сколько делителей у произведения этих чисел.
Т.е. количество делителей числа:
Конечно это задачу можно решить методом ДП.
Вот решение:
Код:
map<uint32_t, uint32_t> memo;
uint32_t F(uint32_t n)
{
if (n == 1) return 1; /* 1 has only one divisor */
if (memo.find(n) != memo.end())
return memo[n];
uint32_t d;
for (d = 2; d < n; ++d)
if (n%d)
break;
if (n == d)
return (memo[n] = 2);
else
return (memo[n] = F(n/d)+F(d));
}
Но вот возникла проблема, дело в том что эти числа не менее
и неболее
Так что при считании произведения получается переполнение.
Ну так как эти 10 чисел - делители. То можно ли для каждого посчитать количество делителей, а потом их суммировать?
Некоторые из них могут быть равны, что делать в таком случае?
И вообще справедливо ли это утверждение что, если
делители некого числа,
то количество делителей этого числа, равно сумме количества делителей каждого из его попарно различных
делителей.
-- 28.12.2013, 19:27 --Да, сразу противоречие:
У 8-ми 4 делителя. А сумма кол-ва делителей делителей 8 равно 5. 2 и 4 скажем.
Но как тогда быть?
-- 28.12.2013, 19:30 --И функция неверна тогда, похоже я совсем заплутал.