что такое факториал и сколько нулей содержит число 100!
произведение всех натуральных чисел от 1 до указанного.
В сто-факториале нужно посчитать, сколько раз в разложение сомножителей на простые входит пятёрка.
Ноль получается из двойки и пятёрки, но двоек всегда заведомо больше.
Считаем:
5, 10, 15, 20; 30, 35, 40, 45; 55, 60, 65, 70; 80, 85, 90, 95 — всего 16, по одной пятёрке в разложении
25, 50, 75 и 100 — по две.
Должно быть 24 нуля.
произведение последовательности чисел, например: 5!=1*2*3*4*5=120
100! содержит 30 нулей
Алена Шумова
ФАКТОРИАЛ: произведение натуральных чисел от единицы до какого-либо данного натурального числа n, т. е. 1·2·3·
Сколько нулей в конце факториала 100?
Факториал одной сотни записывается как 100! Это произведение всех натуральных чисел до ста включительно. Иногда запись факториала имеет такой вид:
100 х 99 х 98 х 97 х … х 4 х 3 х 2 х 1
Для ответа на вопрос задачи вам не обязательно находить результат умножения. От вас ждут, чтобы вы лишь определили число нулей в конце произведения, не зная, каким именно оно будет. Для решения этой задачи потребуется сформулировать несколько правил. Одно из них вы уже знаете. Взгляните на следующее выражение.
387 000 х 12 900 = 5 027 131 727
Вам не кажется, что здесь есть что-то забавное? Ведь при перемножении двух круглых чисел, то есть тех, которые оканчиваются на нули, невозможно получить некруглое число. Это нарушило бы закон сохранения конечных нулей (закон, который я только что вывел, но, тем не менее, он является верным). Произведение всегда унаследует нулевые окончания своих составляющих. Вот несколько верных примеров этого:
10 х 10 = 1007 х 20 = 14030 х 400 = 12 000
Из сомножителей факториала 100 десять заканчиваются на ноль: 10, 20, 30, 40, 50, 60, 70, 80, 90 и 100 (заканчивается на два 0). Это дает уже как минимум одиннадцать конечных нулей, которые 100! обязательно унаследует.
Предупреждение: следование только этому правилу иногда побуждает некоторых кандидатов в своем ответе заявить, что в конце факториала 100 стоят одиннадцать нулей. Такой ответ является неверным. Иногда можно умножить два числа, не заканчивающихся на ноль, и получить произведение, имеющее в конце один или несколько нулей. Вот несколько примеров этого рода:
2 х 5 = 105 х 8 = 406 х 15 = 908 х 125 = 1000
Все, кроме последней пары, входят в сотню составляющих факториала 100. Поэтому ваша работа не закончилась. Теперь мы подходим к закону «сосисок и булочек». Представьте себе ситуацию, когда на пикник одни люди приносят сосиски (в упаковках по десять штук), другие — булочки (упакованные по восемь штук), а некоторые — и то, и другое. Есть единственный способ, позволяющий определить, сколько хотдогов из этих продуктов можно приготовить. Сосчитайте сосиски, сосчитайте булочки и выберите меньшее число из двух.
Тот же самый закон следует использовать и отвечая на наш вопрос. Для этого надо заменить «сосиски» и «булочки» на «сомножители на 2» и «сомножители на 5».
В каждом из приведенных выше уравнений число, которое делится на 2, умножается на число, которое делится на 5. Сомножители на 2 и на 5 при их перемножении «совместно» дают идеальную десятку, что добавляет еще один ноль к общему произведению. Посмотрите на последний пример, где в конце, можно сказать, из воздуха возникает три нуля.
8 х 125 = (2 х 2 х 2) х (5 х 5 х 5)= (2 х 5) х (2 х 5) х (2 х 5)= 10 х 10 х 10= 1000
Поэтому надо составить пары из двоек и пятерок. Возьмем, к примеру, число, равное 692 978 456 718 000 000.
Оно оканчивается на шесть нулей. Это означает, что его можно записать следующим образом:
692 978 456 718 х 10 х 10 х 10 х 10 х 10 х 10,
692 978 456 718 х (2 х 5) х (2 х 5) х (2 х 5) х (2 х 5) х (2 х 5) х (2 х 5).
Первая часть, 692 978 456 718, не делится на 10. В ином случае она бы оканчивалась на ноль, и можно было бы эту часть уменьшить еще в 10 раз. К тому же здесь есть шесть сомножителей, равных 10 (или 2 х 5), что соответствует шести нулям в конце числа 692 978 456 718 000 000. Ну как, убедительно?
Это дает нам надежную систему для определения количества нулей в конце любого большого числа. Выделите сомножители 2 и 5. Составьте из них пары и перемножьте их: (2 х 5) х (2 х 5) х (2 х 5) х … Число пар из двоек и пятерок равно количеству нулей в конце. Закройте глаза на все, что осталось слева.
В целом слева у вас останется двойка или пятерка, для которых не нашлось пары. Обычно это двойки. Более того, когда вы имеете дело с факториалом, это всегда двойки. (В факториалах имеется больше четных множителей, чем множителей, которые делятся на 5.) Поэтому узким местом является число пятерок. Из этого следует, что вопрос можно сформулировать по-другому: сколько раз 100! можно разделить без остатка на 5?
Эту арифметическую операцию можно легко проделать даже в голове. В диапазоне от 1 до 100 есть 20 чисел, которые делятся на пятерку: 5, 10, 15, …, 95, 100. Обратите внимание, что 25 дает 2 множителя, равные 5 (25 = 5 х 5), и к тому же в этой группе есть еще три числа, в состав которых входит 25: 50, 75 и 100. В совокупности это добавляет еще четыре пятерки, а всего их 24. 24 множителя на пять дают 24 пары с равным числом двоек, в результате чего получается 24 множителя на 10 (оставляя слева еще множество двоек, для которых не оказалось пары). Таким образом, в конце 100! будет 24 нуля.
Если вам любопытно узнать точный ответ, то значение факториала 100 равно:
93 326 215 443 944 152 681 699 238 856 266 700 490 715 968 264 381 621 468 592 963 895 217 599 993 229 915 608 941 463 976 156 518 286 253 697 920 827 223 758 251 185 210 916 864 000 000 000 000 000 000 000 000.
Разбор по книге «Действительно ли Вы достаточно умны, чтобы работать в Google?»
Подсчет конечных нулей факториала числа в любой системе счисления
Как я могу посчитать количество конечных нулей факториала числа в определенной системе счисления?
Давайте рассмотрим случай, когда мы находимся в 10-й системе счисления, а затем посмотрим, как мы можем обобщить это в универсальное решение. Нам дано число N и для его факториала нужно найти количество конечных нулей. Решение будет довольно простым — сумма:
Math.floor(N/5) + Math.floor(N/25) + Math.floor(N/125) + Math.floor(N/625) + .
Её мы можем обобщить в такую формулу:
Почему 5? Это просто. Конечный ноль получается только тогда, когда в составе факториала число имеет 10. Таким образом, посчитав количество десяток в факториале, мы узнаем количество конечных нулей.
Почему в примере выше мы делим на 5? Потому что 10 может быть получено умножением 5 на 2. Поэтому полное решение будет иметь две формулы:
Но, рассуждая логически, мы знаем, что первая сумма будет меньше, поэтому нам нужно посчитать только её (подробнее можно почитать тут).
Решение нашей проблемы
Для подсчёта конечных нулей факториала числа в определенной системе счисления я составил алгоритм, приведенный ниже:
- Разложить число B системы счисления на простые множители.
- Разделить число N на каждый уникальной простой множитель K, домножая K сам на себя до тех пор, пока будет больше единицы, при этом округляя каждый результат до меньшего целого.
- Если при разложении числа системы счисления мы получили несколько одинаковых простых множителей K, то результат выше мы должны разделить на количество одинаковых K.
- Из всех делений N на каждый уникальный множитель K выбрать наименьшее частное, которое и будет нашим ответом.
Но двойка встречалась дважды при разложении 12-и, поэтому конечный результат мы делим на 2 и округляем до меньшего целого. В результате получаем 1.
Проделываем тоже самое с 3:
Таким образом, мы получили два частных от делений числа N на простые множители числа системы счисления. Они оба равны 1, поэтому меньшее нам выбирать не приходится и мы просто даем ответ — 1.
Рассмотрим еще один пример.
Пусть число N = 16, система счисления B = 16. Факториал 16! = 20922789888000, а 20922789888000 в 16-ой системе — 130777758000. Мы видим, что в конечной системе счисления факториал исходного числа имеет три ноля. При разложении 16 на простые множители, получим 2, 2, 2, 2. Здесь у нас только одно уникальное число, поэтому пункт 2 выполняется только один раз:
При разложении у нас было четыре двойки, поэтому сумму делений делим на 4 с округлением до меньшего целого:
P.S. Большую часть материала для поста перевел отсюда. Автор — Aditya Ramesh.
- mathematics
- algorithms
Сколько нулей в конце у факториала
Условие : Write a program that will calculate the number of trailing zeros in a factorial of a given number. N! = 1 * 2 * 3 * . * N Be careful 1000! has 2568 digits. For more info, see: http://mathworld.wolfram.com/Factorial.html Examples
zeros(6) = 1 6! = 1 * 2 * 3 * 4 * 5 * 6 = 720 --> 1 trailing zero zeros(12) = 2 12! = 479001600 --> 2 trailing zeros
Hint: You’re not meant to calculate the factorial. Find another way to find the number of zeros. Как мы видим в последней строчке, вычислять факториал не требуется. Но для понимания картины я решил это сделать.
public static int zeros(int n) < BigInteger x = BigInteger.ONE; BigInteger temp = BigInteger.ONE; while (!x.toString().equals(String.valueOf(n))) < temp = temp.multiply(x); x = x.add(BigInteger.ONE); >System.out.println(temp); String tempStr = String.valueOf(temp); int countZero = 0; for(int i = 0 ; i < tempStr.length() ; i ++)< countZero = tempStr.charAt(i)=='0' ? countZero+1 : 0; >return countZero; >
Пробуем N = 1000; Результат : 246. На мой взгляд решение верное (по условию), но ответ неверный. Должно быть 249. Стал копать. Наткнулся на это https://www.geeksforgeeks.org/count-trailing-zeroes-factorial-number/ Ну и ниже решение :
static int findTrailingZeros(int n) < // Initialize result int count = 0; // Keep dividing n by powers // of 5 and update count for (int i = 5; n / i >= 1; i *= 5) count += n / i; return count; >
Пожалуйста, помогите разобраться почему мой код не верен, и что написано в пояснении к решению задачи?