Существует ли некое натуральное число n, факториал которого (n!) имеет 666 завершающих нолей.
Как известно, любое натуральное число больше 4 имеет 1 или более завершающих нолей. Например, 5! = 120 (1 завершающий ноль), 12! = 479001600 (2 завершающих ноля).
получается нет тут умных женщин
Мне мой друг посоветовал этот форум. Сказал, что тут есть некая Эльза - кандидат математических наук, которая ответит на мой вопрос. Еще он сказал, что почти все форумчанки умные женщины с несколькими высшими образованиями...
Уточните задачу: именно 666 нулей, или 666 и более?
Да, существует. Конечные нули в факториале образуют множители, дающие нули в конце. Например, возьмем факториал 125. В его составе есть множители 5×2=10, 25×4=100, 125×8=1000. Т.е. это уже гарантирует 6 нулей, как минимум (на самом деле, конечных нулей у 125! гораздо больше, т.к. и другие множители дают нули - например 10, 100 дадут еще 3 нуля)
Т.е. да, такое число существует.
Да, существует. Конечные нули в факториале образуют множители, дающие нули в конце. Например, возьмем факториал 125. В его составе есть множители 5×2=10, 25×4=100, 125×8=1000. Т.е. это уже гарантирует 6 нулей, как минимум (на самом деле, конечных нулей у 125! гораздо больше, т.к. и другие множители дают нули - например 10, 100 дадут еще 3 нуля)
Т.е. да, такое число существует.
Нужно точно ответить, существует ли n!, имеющий ровно 666 нолей?
Пришлось самому проверить формулой Полиньяка.
Такое число не существует, т.к. 2674! имеет 665 нолей, а 2675! уже 667 нолей.
Женщины, я вас разочарован. Покупайте научную литературу и развивайтесь, а не в сексшопы ходите.
import sys
sys.setrecursionlimit(1000000)
def factorial(n):
if n == 0:
return 1
else:
return n * factorial(n-1)
num=1
while 1:
count=0
n=factorial(num)
while n % 10 == 0:
count += 1
n //= 10
if count==666:
print(num)
num += 1
Ждите ответа.....
import sys
sys.setrecursionlimit(1000000)
def factorial(n):
if n == 0:
return 1
else:
return n * factorial(n-1)
num=1
while 1:
count=0
n=factorial(num)
while n % 10 == 0:
count += 1
n //= 10
if count==666:
print(num)
num += 1
Ждите ответа.....
Я же в 9 комментарии написал ответ, что не существует. Я поступил более легким путем.
Скачал на телефон систему компьютерной алгебры Maxima on Android.
Нам создал функцию формулы Полиньяка:
f(n):= sum(floor(n/5^i),i,1,floor(log(n)/log(5)))$
Эта функция считает завершающие нули факториала. Пл этой функции нашел, что:
f(2674)=665 (т.е. 2674! имеет 665 завершающих нулей)
f(2675)=667
Т.е. факториал ни одного натурального числа не будет иметь 666 завершающих нолей.
Я же в 9 комментарии написал ответ, что не существует. Я поступил более легким путем.
Скачал на телефон систему компьютерной алгебры Maxima on Android.
Нам создал функцию формулы Полиньяка:
f(n):= sum(floor(n/5^i),i,1,floor(log(n)/log(5)))$
Эта функция считает завершающие нули факториала. Пл этой функции нашел, что:
f(2674)=665 (т.е. 2674! имеет 665 завершающих нулей)
f(2675)=667
Т.е. факториал ни одного натурального числа не будет иметь 666 завершающих нолей.
Прям вот так взяли и сразу стали считать для 2674, или все же перебором в цикле? Тогда чем это отличается от моего решения?
Прям вот так взяли и сразу стали считать для 2674, или все же перебором в цикле? Тогда чем это отличается от моего решения?
Когда я задал функцию, я построил для них графики функции, чтобы наглядно понять как возрастание числа n увеличивает завершающие нули в n!. Потом выбрал на глаз.
https://i.postimg.cc/yY43QSH1/Screenshot-2020-11-02-13-09-11.png
https://i.postimg.cc/vTLYSTrT/Screenshot-2020-11-02-13-10-18.png
Когда я задал функцию, я построил для них графики функции, чтобы наглядно понять как возрастание числа n увеличивает завершающие нули в n!. Потом выбрал на глаз.
https://i.postimg.cc/yY43QSH1/Screenshot-2020-11-02-13-09-11.png
https://i.postimg.cc/vTLYSTrT/Screenshot-2020-11-02-13-10-18.png
Вас не смущает диссонанс между словами "на глаз" и "точная наука"?
Ах да, чтобы составить скрипт в Maxima, и получить результат не на глазок, нужно знать Lisp, а это уже слишком для тролля с вумана :-D
После строки
f(n):= sum(floor(n/5^i),i,1,floor(log(n)/log(5)))$
можно добавить
k:0$ for i:1 do(k:f(i), if k>=666 then return(i))
и получить 2675.
После можно проверить f(2675) и получить 667. Зная, что цикл должен был остановиться при >=666 и он остановился в 667, то функция ни при каком аргументе не получает 666.
Возможно, можно было придумать что-то получше, используя Wolfram Mathematica, который у меня на ПК. Но я писал скрипт на телефоне в бесплатной СКА Maxima.
Расслабьтесь. Мы поняли, что не только домохозяйки владеют пакетами численной математики ;)