Задача такова: необходимо найти 1000 чисел не имеющих простых делителей кроме 2,3 и 5 (например 1,2,3,4,5,6,8,9,10,12,15,16,18,20,24...), за пару минут с while'ом написал программу просто перебирающую все варианты и проверяющую выполнимость условия, но проблема в том что такой вариант выполнения занимает много времени (секунд 10), хотелось бы узнать более оптимальный вариант решения... достаточно лишь описать что должен делать и в каком порядке алгоритм...
приходит на ум вывести 1000 вариантов умножения 2,3,5 друг на друга (кстати, а что там 1 делает?).
всем спасибо, ... нашел решение, представляем все числа в виде 2^m*3^n*5^k, и при n=m=k=0 появляется 1
, затем просто приводим эт выражение под одну степень 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) минимальное большее от предыдущего... все гениальное просто...да к тому же такая прога должна работать намного быстрее...
Цитата
приходит на ум вывести 1000 вариантов умножения 2,3,5 друг на друга
забыл об одной фишке упомянуть: все в порядке возрастания надо еще вывести, а на сортировку тож время надо, да и массив прописывать влом...
Цитата
дальше перебором находим такие m n k что новое значение m+n*(log по осн 2 из 3)+k*(log по осн 2 из 5) минимальное большее от предыдущего
А до какого числа ты собрался делать перебор ? Вот например при
m = 0
n = 5
k = 10
Выражение уже не влезает в longint, а 1000 чисел еще найдено не было.
Цитата(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 туре всеросийской олимпиады среди школьников по программированию?
Регистрация,
Сайт олимпиады