Форум программистов, компьютерный форум, киберфорум
Алгоритмы
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.72/29: Рейтинг темы: голосов - 29, средняя оценка - 4.72
6 / 6 / 4
Регистрация: 13.10.2012
Сообщений: 101

Функция, обратная факториалу для огромного числа

19.06.2013, 16:23. Показов 5634. Ответов 7

Студворк — интернет-сервис помощи студентам
Помню в этом году на олимпиаде по программированию мне попалась такая задачка(не дословно): есть целое число k в строчной записи(10<=n<=100000, n -- количество десятичных разрядов в числе k), найти число m, m! == k. В какую сторону копать? Длинная арифметика? Там ограничение времени работы по-моему 3 секунды было, явно не уложимся.
0
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
19.06.2013, 16:23
Ответы с готовыми решениями:

Функция обратная факториалу
Как найти число n, если N=n! Для нахождения факториала код вот такой for i:=1 to n do begin N:=N*i; end; ...

Тип для хранения огромного числа.
Нужно хранить огромное число целого типа.Что-то около 17-24 цифр. Подойдёт ли int 64?

Получить все натуральные числа меньшие заданного, квадрат суммы которых равен факториалу некоторого числа
даны натуральные числа m и n, получить все натуральные числа меньшие n, квадрат суммы которых равен m! просьба помочь с написанием...

7
Эксперт функциональных языков программированияЭксперт по математике/физике
4312 / 2104 / 431
Регистрация: 19.07.2009
Сообщений: 3,196
Записей в блоге: 24
19.06.2013, 17:01
Начиная с m=3 число m можно определить по числу разрядов n. Нужно только формулу придумать.
Впрочем, с точностью до https://www.cyberforum.ru/cgi-bin/latex.cgi?\pm5 можно определить m по числу нулей справа в числе. Напомню, что число нулей равно
https://www.cyberforum.ru/cgi-bin/latex.cgi?\sum_{z=1}^\infty z \left( k \operatorname{ div } 5^z \right)

Я предлагаю копать в сторону косвенных признаков.
2
1964 / 820 / 114
Регистрация: 01.10.2012
Сообщений: 4,781
Записей в блоге: 2
19.06.2013, 17:23
Что если свести к (модифицированному) двоичному поиску? С той разницей что делить отрезок не пополам, а хитрее, напр по десятичному логарифму? Конечно это сырая наметка, не более
0
294 / 206 / 2
Регистрация: 20.02.2011
Сообщений: 551
20.06.2013, 11:34
Формула Стирлинга не прокатит? Хотя, вывернуть ее в обратную сторону - задача не простая. Итерационным методом решать?
0
 Аватар для NurlashKO
168 / 90 / 80
Регистрация: 07.10.2012
Сообщений: 145
21.06.2013, 21:36
Можно сделать так :
Берем число К и последовательно начинаем делить на 2, 3, 4, 5...
Если число стало равно 1 то значит просто выводим последнее число на которое мы его поделили.
Иначе, если число в какойто момент не поделилось говорим что ответа не существует.
В ТЛ должно уложится.
0
6 / 6 / 4
Регистрация: 13.10.2012
Сообщений: 101
21.06.2013, 22:05  [ТС]
Цитата Сообщение от NurlashKO Посмотреть сообщение
Можно сделать так :
Берем число К и последовательно начинаем делить на 2, 3, 4, 5...
Если число стало равно 1 то значит просто выводим последнее число на которое мы его поделили.
Иначе, если число в какойто момент не поделилось говорим что ответа не существует.
В ТЛ должно уложится.
если я не сруко*опил, то нам понадобится
Python
1
2
3
4
5
6
7
8
>>> n=int("9"*100000)
>>> for i in range(20,10000000):
    if 2**i>n:
        print (i)
        break
 
    
332193
битное число, а это большое число писать нужно было либо на TurboPascal'е(для него это может даже неподъемная задача) либо на С++/Си, так что пришлось бы писать еще длинную арифметику, да и в 3 секунды ну никак не уложились бы.
0
0 / 0 / 0
Регистрация: 26.10.2018
Сообщений: 7
23.05.2019, 01:10
Python
1
2
3
4
5
6
k=int(input())
i=2
while k>1:
    k=k/i
    i+=1
print(i-1)
0
194 / 174 / 30
Регистрация: 10.07.2012
Сообщений: 800
25.05.2019, 14:10
бинпоиском можно найти последнее простое число р, на которое делится n. ответ лежит в интервале [р, следующее простое). длина интервала не может быть сильно больше 10. чтобы понять, какое из них, предлагается посчитать остатки n по к следующим за р простым (или любым к достаточно большим простым). а затем считать остатки р!, (р+1)! и т.д. пока не получим совпадение. за счет того, что мы считаем не факториал, а только его остатки по маленьким модулям, все должно быть быстро.
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
25.05.2019, 14:10
Помогаю со студенческими работами здесь

Обратная функция Hide для формы (не Show)
Добрый вечер! У меня в программе, при переключении форм прячется первая (Hide), а как можно эту же форму вернуть обратно., не используя...

Запуск огромного числа копий
Здравствуйте! Такая проблема, скрипт каждые 5 минут имитирует нажатие на Enter. Скрипт работает. Но проблема в том, что запускается много...

Вычислить синус огромного числа
Всем привет! Люди, помогите! Нужно написать программу, которая вычисляет синус любого числа, каким бы огромным оно ни было. Обязательное...

Вывести последовательность из цифр огромного числа
Задание во вложении. Собственно код: #include &lt;iostream&gt; #include &lt;math.h&gt; using namespace std; double factorial(int to); ...

Создание огромного числа труб Picturebox в игре Flappy bird
Всем привет! Вот разрбатываю игру flappy bird, столкнулся с такой проблемой, что не могу прорисовать трубы(PictureBox). Написал код для...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
8
Ответ Создать тему
Новые блоги и статьи
Кто-нибудь знает, где можно бесплатно получить настольный компьютер или ноутбук? США.
Programma_Boinc 26.12.2025
Кто-нибудь знает, где можно бесплатно получить настольный компьютер или ноутбук? США. Нашел на реддите интересную статью под названием «Кто-нибудь знает, где получить бесплатный компьютер или. . .
Thinkpad X220 Tablet — это лучший бюджетный ноутбук для учёбы, точка.
Programma_Boinc 23.12.2025
Рецензия / Мнение/ Перевод Нашел на реддите интересную статью под названием The Thinkpad X220 Tablet is the best budget school laptop period . Ниже её машинный перевод. Thinkpad X220 Tablet —. . .
PhpStorm 2025.3: WSL Terminal всегда стартует в ~
and_y87 14.12.2025
PhpStorm 2025. 3: WSL Terminal всегда стартует в ~ (home), игнорируя директорию проекта Симптом: После обновления до PhpStorm 2025. 3 встроенный терминал WSL открывается в домашней директории. . .
Как объединить две одинаковые БД Access с разными данными
VikBal 11.12.2025
Помогите пожалуйста !! Как объединить 2 одинаковые БД Access с разными данными.
Новый ноутбук
volvo 07.12.2025
Всем привет. По скидке в "черную пятницу" взял себе новый ноутбук Lenovo ThinkBook 16 G7 на Амазоне: Ryzen 5 7533HS 64 Gb DDR5 1Tb NVMe 16" Full HD Display Win11 Pro
Музыка, написанная Искусственным Интеллектом
volvo 04.12.2025
Всем привет. Некоторое время назад меня заинтересовало, что уже умеет ИИ в плане написания музыки для песен, и, собственно, исполнения этих самых песен. Стихов у нас много, уже вышли 4 книги, еще 3. . .
От async/await к виртуальным потокам в Python
IndentationError 23.11.2025
Армин Ронахер поставил под сомнение async/ await. Создатель Flask заявляет: цветные функции - провал, виртуальные потоки - решение. Не threading-динозавры, а новое поколение лёгких потоков. Откат?. . .
Поиск "дружественных имён" СОМ портов
Argus19 22.11.2025
Поиск "дружественных имён" СОМ портов На странице: https:/ / norseev. ru/ 2018/ 01/ 04/ comportlist_windows/ нашёл схожую тему. Там приведён код на С++, который показывает только имена СОМ портов, типа,. . .
Сколько Государство потратило денег на меня, обеспечивая инсулином.
Programma_Boinc 20.11.2025
Сколько Государство потратило денег на меня, обеспечивая инсулином. Вот решила сделать интересный приблизительный подсчет, сколько государство потратило на меня денег на покупку инсулинов. . . .
Ломающие изменения в C#.NStar Alpha
Etyuhibosecyu 20.11.2025
Уже можно не только тестировать, но и пользоваться C#. NStar - писать оконные приложения, содержащие надписи, кнопки, текстовые поля и даже изображения, например, моя игра "Три в ряд" написана на этом. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2025, CyberForum.ru