|
Компьютерный форум OSzone.net » Программирование, базы данных и автоматизация действий » Программирование и базы данных » C/C++ - Ускорение поиска числа факториала |
|
C/C++ - Ускорение поиска числа факториала
|
Старожил Сообщения: 222 |
Профиль | Отправить PM | Цитировать Люди помогите сделать бысрый алгоритм нахождения числа из его факториала.
Я писал вот такой код но он оч медленный #include <iostream.h> #include <fstream.h> int faknom(int a) { int i=1; while(a!=i) { a=a/i; i++; }; return i; }; int main() { int Nfak; ifstream fin("input.txt"); fin>>Nfak; fin.close(); ofstream fout("output.txt"); fout<<faknom(Nfak)<<endl; fout.close(); return 0; } Как ускорить алгоритм расчета? |
|
Отправлено: 13:00, 01-06-2008 |
редкий гость Сообщения: 1696
|
Профиль | Сайт | Отправить PM | Цитировать Такой, который использует длинную арифметику. Лучше не a делить на i, а ввести некоторое b, которое домножать на i до тех пор пока b < a. (потому что умножение длинных чисел сильно быстрее деления)
|
------- Отправлено: 14:47, 01-06-2008 | #11 |
Для отключения данного рекламного блока вам необходимо зарегистрироваться или войти с учетной записью социальной сети. Если же вы забыли свой пароль на форуме, то воспользуйтесь данной ссылкой для восстановления пароля. |
Старожил Сообщения: 222
|
Профиль | Отправить PM | Цитировать Всеравно исчерпывается лимит времени.
Тут полный проход по деления или умножению некатит. Над какойто иной способ. А на ассемблере что никто и нескажет как написать? |
------- Отправлено: 15:06, 01-06-2008 | #12 |
Новый участник Сообщения: 15
|
Профиль | Отправить PM | Цитировать А для чисел меньше 12 за сколько времени прога срабатывает?
|
------- Отправлено: 15:21, 01-06-2008 | #13 |
Ветеран Сообщения: 3320
|
Профиль | Отправить PM | Цитировать На ассемблере (как и в Паскале и в С) есть так называемые операции сдвига:
вправо (shr) и влево (shl). Для десятичной системы это выглядит так На примере двоичной системе становится ясно откуда они получили своё имя 00010101 shl 3 => 10101000 и в другую сторону при shr Они могут быть полезны, если придумать как их здесь можно применить. |
Отправлено: 15:33, 01-06-2008 | #14 |
Старожил Сообщения: 222
|
Профиль | Отправить PM | Цитировать Че придумывать если я ассемблера незнаю?
|
------- Отправлено: 16:09, 01-06-2008 | #15 |
Ветеран Сообщения: 1404
|
Профиль | Отправить PM | Цитировать Почему бы не создать список всех факториалов до 2000 в файле!?
номер факториала соответствует номеру строки. Считываем заданное число, помещаем в строку, определяем длину строки и начинаем сравнивать длину строки заданного числа с длинами строк в файле, Начать нужно не с нуля, а со строки номер которой равен длине строки заданного числа. Если длины строки равны, то номер строки в файле искомый факториал. Таким образом задача избавляется от чрезмерно быстрого факториального роста. задача сводится к поиску. Можно создать 2000 файлов, чтобы не мучать один файл и сравнивать уже количество байт файла в котором заданное число и количество байт в файле, в котором факториалы. Просто тупо проверяем есть ли файл заданного размера. Без вычислений. |
------- Последний раз редактировалось mrcnn, 01-06-2008 в 16:27. Отправлено: 16:13, 01-06-2008 | #16 |
Старожил Сообщения: 222
|
Профиль | Отправить PM | Цитировать Понимаете ето задача для онлайн контестера тип АСМ. Время выполнения программы для даной задачи ограничено 1 секундой и обьем кода до 4кб. И кроме кода сторонних фаилов использовать нельзя.
|
------- Отправлено: 16:24, 01-06-2008 | #17 |
Ветеран Сообщения: 3320
|
Профиль | Отправить PM | Цитировать DaRiYs, я указал что
Цитата Admiral:
Цитата Admiral:
|
||
Отправлено: 16:28, 01-06-2008 | #18 |
Ветеран Сообщения: 1404
|
Профиль | Отправить PM | Цитировать Надо было сразу указывать эти ограничения. Что такое контестер, что такое ACM и что такое контестер типра ACM?
|
------- Отправлено: 16:38, 01-06-2008 | #19 |
Будем жить, Маэстро... Сообщения: 6694
|
Профиль | Сайт | Отправить PM | Цитировать Coutty,
Цитата Coutty:
|
|
------- Отправлено: 16:40, 01-06-2008 | #20 |
Участник сейчас на форуме | Участник вне форума | Автор темы | Сообщение прикреплено |
| |||||
Название темы | Автор | Информация о форуме | Ответов | Последнее сообщение | |
Простые числа на Си++ | nemo555 | Программирование и базы данных | 13 | 13-03-2007 21:24 | |
*Теория* | Числа Фибоначчи | Grub | Программирование и базы данных | 8 | 28-07-2006 14:23 | |
четность числа | elfoflorien | Вебмастеру | 6 | 18-09-2005 20:49 | |
Случайные числа на JavaScript | Dimonweb | Вебмастеру | 2 | 12-08-2004 03:23 | |
суммироват числа | Artashes | Программирование и базы данных | 3 | 30-08-2003 18:31 |
|