Для дополнительных занятий
Пример 14. Сколько всех делителей у числа 210? У числа 30030? У целого числа n?
Первая
мысль, которая возникает, - это делить заданное натуральное число на простые числа и подсчитать число простых делителей. Остальные делители получаются всевозможными сочетаниями из простых делителей. Значит, возникает необходимость подсчитать число таких сочетаний, причем сочетания должны быть различными.
Но такой путь является достаточно сложным и долгим. Более простой путь решения можно избрать, если знать следующее математическое утверждение.
Пусть p1, ..., pm - различные простые делители числа q. Если
, где - некоторые натуральные числа, тогда число всех делителей числа q (включая 1 и q) равно числу сочетаний с повторениями (кортежей) показателей степеней a1, a2, ..., am, которое, в свою очередь, равно произведению:Основываясь на этом предложении составим программу.
Алгоритм
для составления программы может быть таким:
1.
Определяется число простых делителей, равных 2.
2. Число этих делителей увеличивается на 1 и присваивается переменной s.
3. Определяется число нечетных простых делителей.
4. Для каждого простого нечетного делителя устанавливается их число, увеличивается на 1 и умножается на s.
5. Результат - число всех делителей выводится на экран.
Программа
Program Problem14;
uses WinCrt;
var
s, q, m, j, n : integer;
begin
write('Введите целое число '); readln(n);
m := n;
q := 0;
s := 0;
while m mod 2 = 0 do
begin
q := q + 1;
m := m div 2
end;
s := q + 1; j := 3; q := 0;
while j <= m do
begin
if m mod j =0 then
begin
q := q + 1;
m := m div j
end;
s := s*(q + 1);
if m mod j <> 0 then j := j + 2
end;
writeln('К-во всех делителей числа ', n, ' равно ', s)
end.