М
Молодежь
К
Компьютеры-и-электроника
Д
Дом-и-сад
С
Стиль-и-уход-за-собой
П
Праздники-и-традиции
Т
Транспорт
П
Путешествия
С
Семейная-жизнь
Ф
Философия-и-религия
Б
Без категории
М
Мир-работы
Х
Хобби-и-рукоделие
И
Искусство-и-развлечения
В
Взаимоотношения
З
Здоровье
К
Кулинария-и-гостеприимство
Ф
Финансы-и-бизнес
П
Питомцы-и-животные
О
Образование
О
Образование-и-коммуникации
Sindex212
Sindex212
23.02.2020 21:20 •  Информатика

Написать программу, которая для заданного n определяет, сколько нулей стоит в конце числа n! . (предполагается, что n достаточно велико и непосредственное вычисление функции n! умножением невозможно).

👇
Ответ:
fragerin
fragerin
23.02.2020
Заметим, что число нулей в записи числа = максимальная степень десятки, на которую делится число = минимальная из степеней двойки и пятерки, входящих в разложение на простые множители этого числа. [Первое равенство очевидно, второе можно доказать от противного]
Например, 7500 имеет на конце 2 нуля: 7500 = 2^2 * 3 * 5^4 - минимальная из степеней двойки и пятерки как раз 2.

В разложении числа N! на простые множители пятерок всегда не больше, чем двоек: если в выражении N!=1*2*3*.,,*N есть множитель вида m*5^k, то есть и множитель m*2^k - хотя бы потому, что второе число меньше первого, а факториал - это произведение всех чисел меньше заданного. Поэтому при разложении на простые множители степень двойки хотя бы степень двойки. Используя наблюдение из первого параграфа, получаем:
Число нулей в конце десятичной записи числа N! совпадает с числом пятерок в разложении числа N! на простые множители.

Остается найти число пятерок в разложении. Проще всего это понять на примере.
26! = 1 * 2 * 3 * 4 * 5 * 6 * 7 * 8 * 9 * 10 * 11 * 12 * 13 * 14 * 15 * 16 * 17 * 18 * 19 * 20 * 21 * 22 * 23 * 24 * 25 * 26

Число чисел, делящихся на 5, среди первых 26 чисел равно пяти (это 5, 10, 15, 20, 25). Это число можно найти, округлив вниз результат от деления 26/5.
Если подумать, можно понять, что в разложении 26! на простые множители 5 встретится не 5 раз - мы забыли учесть число 25, которое даст не одну пятерку, а две. И вообще, в ответ сомножитель что-то*5^n будут давать n пятерок.

Итого ответ для произвольного N: [N/5] + [N/5^2] + [N/5^3] + ...

Алгоритм:
c = 0
пока [N/5] > 0:
   увеличиваем c на [N/5]
   N = [N/5]
вывод c

Питон-3:
N = int(input())
c = 0
while N//5 > 0:
   c += (N//5)
   N = N//5
print(c)
4,4(15 оценок)
Открыть все ответы
Ответ:
AidarSharafutdinov
AidarSharafutdinov
23.02.2020
CONST k=10; {k - количество чисел в массиве}VAR a:array[1..k] of integer;    i,summ,n:integer; {i - счетчик цикла, summ - сумматор, n - количество элементов массива с четным значением}    sr:real; {sr - среднее арифметическое} BEGIN  summ:=0; n:=0; {Обнуляем счетчики}  for i:=1 to k do     begin      a[i]:=random(50); {Заполняем массив случайными числами}      write (a[i],' '); {Выводим массив}      if a[i] mod 2=0 then         begin          summ:=summ+a[i]; {Находим сумму элементов массива с четными значениями}          n:=n+1        end    end;  sr:=summ/n; {Находим среднее арифметическое}  writeln;  writeln (sr:0:2) {Выводим среднее арифметическое}END.
4,5(32 оценок)
Ответ:
fil2143878
fil2143878
23.02.2020
3)
var x, y, min, max: real;
label M1;
begin
write('x=');
readln(x);
write('y=');
readln(y);
If x>y then
begin
min:=x;
max:=y;
goto M1;
end
else
min:=y;
max:=x;
goto M1
M1: writeln('min=', min:8:3, ' max=', max:8:3);
end.
2) var a, b, c: real;
begin
write('a=');
readln(a);
write('b=');
readln(b);
write('c=');
readln(c);
If (a=b) and (b=c) then
begin
writeln('Треугольник равносторонний');
end
else
writeln('Треугольник неравносторонний');
end.
1) var a, b: real;
begin
write('Допустимая скорость =');
readln(a);
write('Скорость водителя =');
readln(b);
If (a=b) or (a>b) then writeln('Водитель не превысил скорость');
If a<b then writeln('Водитель превысил скорость');
end.

Я надеюсь, что я правильно поняла задание первой и второй задачи о:
4,7(77 оценок)
Новые ответы от MOGZ: Информатика
logo
Вход Регистрация
Что ты хочешь узнать?
Спроси Mozg
Открыть лучший ответ