найти самое круглое число между двумя заданными |
Здравствуйте, гость ( Вход | Регистрация )
найти самое круглое число между двумя заданными |
mezmay |
20.3.2010, 16:35
Сообщение
#1
|
Активный участник Группа: Участник Сообщений: 272 Регистрация: 13.7.2009 Из: Ростов-на-Дону Пользователь №: 904 Спасибо сказали: 16 раз(а) Репутация: 1 |
Нужна функция, которая бы быстро могла найти самое круглое целое число между двумя заданными. Например:
f(9, 11) = 10; f(121, 199) = 150; f(1, 9999) = 5000; есть моя медленная реализация (долго на больших, сильно удаленных друг от друга числах):
вопрос - КАК сделать это быстрее? |
|
|
Iron Bug |
20.3.2010, 20:33
Сообщение
#2
|
Профессионал Группа: Модератор Сообщений: 1611 Регистрация: 6.2.2009 Из: Yekaterinburg Пользователь №: 533 Спасибо сказали: 219 раз(а) Репутация: 12 |
ну, во первых, расмотрим, к примеру, делитель 5. если число не делится на 5, то он не делится на 50, 500 и т.д. следовательно, можно сначала просто проверять делимость на 5. очевидно, что каждое пятое число натурального ряда делится на 5.
так что можно для начала делить, скажем, на 5 и смещаться по единице. в пределах первых пяти чисел будет найдено число, которое будет делиться на пять. далее, найдя это число, которое делится на 5, его можно проверить на делимость на 50, 500 и т.д, и после него уже можно идти не со смещением +1, а со смещением +5. так как между ними уже гарантированно ничего на 5 не делится. аналогично и с двойкой и прочими числами. так что это можно сразу отсекать и даже не проверять. уже экономия операций. на основе делимости можно изобрести более хитрый алгоритм. скажем, обнаружив, что мы можем идти со смещением не +5, а +50 или +500 - сначала двигаться с таким смещением, пока не выйдем за пределы интервала. аналогично, в несколько проходов, проверять остальные числа ряда А, порождённые основаниями 1 и 2. |
|
|
mezmay |
20.3.2010, 20:46
Сообщение
#3
|
Активный участник Группа: Участник Сообщений: 272 Регистрация: 13.7.2009 Из: Ростов-на-Дону Пользователь №: 904 Спасибо сказали: 16 раз(а) Репутация: 1 |
есть!!! Сообщение отредактировал mezmay - 20.3.2010, 20:53 |
|
|
Текстовая версия | Сейчас: 30.11.2024, 0:41 |