2014 dxdy logo

Научный форум dxdy

Математика, Физика, Computer Science, Machine Learning, LaTeX, Механика и Техника, Химия,
Биология и Медицина, Экономика и Финансовая Математика, Гуманитарные науки




На страницу 1, 2  След.
 
 Количество делителей.
Сообщение28.12.2013, 18:53 
Добрый вечер.
Я решаю такую задачу, даны 10 чисел $a_1, a_2, ..., a_{10}$
Нужно определить сколько делителей у произведения этих чисел.
Т.е. количество делителей числа:
$a_1 \cdot a_2 \cdot ... \cdot a_{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));
}

Но вот возникла проблема, дело в том что эти числа не менее $1$ и неболее $10^4$
Так что при считании произведения получается переполнение.

Ну так как эти 10 чисел - делители. То можно ли для каждого посчитать количество делителей, а потом их суммировать?
Некоторые из них могут быть равны, что делать в таком случае?

И вообще справедливо ли это утверждение что, если $a_1, a_2, ... a_{10}$ делители некого числа,
то количество делителей этого числа, равно сумме количества делителей каждого из его попарно различных
делителей.

-- 28.12.2013, 19:27 --

Да, сразу противоречие:
У 8-ми 4 делителя. А сумма кол-ва делителей делителей 8 равно 5. 2 и 4 скажем.
Но как тогда быть?

-- 28.12.2013, 19:30 --

И функция неверна тогда, похоже я совсем заплутал. :-(

 
 
 
 Re: Количество делителей.
Сообщение28.12.2013, 19:01 
Просто сложить нельзя, т.к. множества делителей могут пересекаться и мы посчитаем какой-либо делитель несколько раз. Вместо этого каждое число можно факторизовать, сложить показатели степеней простых , тем самым получив факторизацию произведения. Теперь количество делителей посчитать будет просто.

 
 
 
 Re: Количество делителей.
Сообщение28.12.2013, 19:02 
helgui, извините, но я новичок. И не знаю что такое факторизация. Можете привести пример?

 
 
 
 Re: Количество делителей.
Сообщение28.12.2013, 19:05 
Конечно. Каждое натуральное число представимо в виде произведения простых единственным образом. Или же в виде произведения степеней различных простых (равносильна формулировка). Зная факторизацию числа можно определять его теоретико- числовые характеристики, в том числе количество делителей.

 
 
 
 Re: Количество делителей.
Сообщение28.12.2013, 19:06 
Факторизация - это разложение числа на произведение простых чисел.
Но как это поможет определить количество делителей числа?

 
 
 
 Re: Количество делителей.
Сообщение28.12.2013, 19:07 
Пример. $36=2^2 \cdot 3^2$

-- 28.12.2013, 20:08 --

А вот тут уж сами подумайте. Почитайте хотя бы вики и все прояснится, здесь не принято давать готовые решения.

 
 
 
 Re: Количество делителей.
Сообщение28.12.2013, 19:08 
helgui, получается, у 36 4 делителя?

 
 
 
 Re: Количество делителей.
Сообщение28.12.2013, 19:10 
Нет, у 36 девять делителей. Количество делителей однозначно определяется показателями степеней простых. И не равно их сумме. Мы суммируем показатели, чтобы узнать факторизацию произведения чисел. Например, $a = 2 \cdot 3, b = 2^3 \cdot 5$, тогда $c = ab = 2^4\cdot3 \cdot 5$

 
 
 
 Re: Количество делителей.
Сообщение28.12.2013, 19:14 
Но как вы это определили?

 
 
 
 Re: Количество делителей.
Сообщение28.12.2013, 19:17 
Я определил это, как $3\cdot 3$. Все, дальше сами. На вики есть статья про функцию количество делителей, она же $\tau$ или $ \sigma_0$

 
 
 
 Re: Количество делителей.
Сообщение28.12.2013, 22:56 

(Оффтоп)

Вчера сын озадачился идеей - написать калькулятор рациональных чисел (в натуральных дробях). Сразу выяснили, что 4 арифметические операции реализуются тривиально, осталось только нормализовать результат - привести к несократимой дроби. Ну я и сказал - придумай сам более-менее эффективный алгоритм, не просто перебор всех натуральных чисел до половины факторизуемого - это неоптимально, и не перебор всех простых до того же предела - надо иметь длинный массив готовых простых. А сейчас почитал в вики обзор методов факторизации и подумал, что несколько опрометчиво озадачил его этим вопросом...

 
 
 
 Re: Количество делителей.
Сообщение29.12.2013, 00:52 
Недопол. Вообще-то, для приведения к несократимой дроби нафиг не нужна факторизация.

 
 
 
 Re: Количество делителей.
Сообщение29.12.2013, 01:07 
Недопол. (C) Намекните, как можно сделать без факторизации.

 
 
 
 Re: Количество делителей.
Сообщение29.12.2013, 01:17 
Алгоритмом Евклида найти НОД же. Учтя при этом специфику чисел, если полезут совсем уж громадные числитель/знаменатель.

 
 
 
 Re: Количество делителей.
Сообщение29.12.2013, 01:23 
Уже понял, что вы Евклида предложите. Спасибо.

(Оффтоп)

Хотел написать, что не будем захватывать чужую тему, но я до сих пор не понимаю, где проходит грань между захватом темы и развитием ее, попытками тоже разобраться в вопросе, озвученном ТС. Я уже несколько раз получал предупреждения, но так и не понял этот момент. Сильно подозреваю, что он абсолютно субъективен.

 
 
 [ Сообщений: 17 ]  На страницу 1, 2  След.


Powered by phpBB © 2000, 2002, 2005, 2007 phpBB Group