Помощь - Поиск - Пользователи - Календарь
Полная версия: Оптимизация решения...
Форум «Всё о Паскале» > Pascal, Object Pascal > Задачи
zZz
Задача такова: необходимо найти 1000 чисел не имеющих простых делителей кроме 2,3 и 5 (например 1,2,3,4,5,6,8,9,10,12,15,16,18,20,24...), за пару минут с while'ом написал программу просто перебирающую все варианты и проверяющую выполнимость условия, но проблема в том что такой вариант выполнения занимает много времени (секунд 10), хотелось бы узнать более оптимальный вариант решения... достаточно лишь описать что должен делать и в каком порядке алгоритм...
FreeMan
приходит на ум вывести 1000 вариантов умножения 2,3,5 друг на друга (кстати, а что там 1 делает?).
zZz
всем спасибо, ... нашел решение, представляем все числа в виде 2^m*3^n*5^k, и при n=m=k=0 появляется 1 smile.gif , затем просто приводим эт выражение под одну степень 2^m*3^n*5^k=2^(m+n*(log по осн 2 из 3)+k*(log по осн 2 из 5)), первая комбинация m n k - 0 0 0, дальше перебором находим такие m n k что новое значение m+n*(log по осн 2 из 3)+k*(log по осн 2 из 5) минимальное большее от предыдущего... все гениальное просто...да к тому же такая прога должна работать намного быстрее... wink.gif
zZz
Цитата
приходит на ум вывести 1000 вариантов умножения 2,3,5 друг на друга

забыл об одной фишке упомянуть: все в порядке возрастания надо еще вывести, а на сортировку тож время надо, да и массив прописывать влом...
klem4
Цитата
дальше перебором находим такие m n k что новое значение m+n*(log по осн 2 из 3)+k*(log по осн 2 из 5) минимальное большее от предыдущего


А до какого числа ты собрался делать перебор ? Вот например при
m = 0
n = 5
k = 10

Выражение уже не влезает в longint, а 1000 чисел еще найдено не было.
zZz
Цитата(klem4 @ 19.04.2006 9:46) *

А до какого числа ты собрался делать перебор ? Вот например при
m = 0
n = 5
k = 10

Выражение уже не влезает в longint, а 1000 чисел еще найдено не было.

значение при m=0 n=5 k=10 соответствует 2,1582735598713E37, а 1000ое число (в первой проге еще получил) если не ошибаюсь было 51200000 плюс/минус ноль, что значительно меньше 2,1582735598713E37, значит прокатит...

ps/ все слышали про внеконкурсное участие в on-line туре всеросийской олимпиады среди школьников по программированию? Регистрация, Сайт олимпиады
Это текстовая версия — только основной контент. Для просмотра полной версии этой страницы, пожалуйста, нажмите сюда.