[Архив!] Чистая математика, физика, химия и т.п.: задачки для тренировки мозгов, никак не связанные с торговлей - страница 452
Вы упускаете торговые возможности:
- Бесплатные приложения для трейдинга
- 8 000+ сигналов для копирования
- Экономические новости для анализа финансовых рынков
Регистрация
Вход
Вы принимаете политику сайта и условия использования
Если у вас нет учетной записи, зарегистрируйтесь
По большому счету надо снимать ограничения на сумму. Все рассуждения остаются по сути такими же, просто их больше.
Судя по тому, что в цитате челу потребовался Cray 1, его алгоритм был менее оптимизирован, чем твой :)
1. На сумму ограничения снималь нельзя - она часть задачи. При разных суммах получаются разные результаты.
2. Если по серьёзному - старался сильно. :)
Несколько фишек делают скрипт быстрым. Первая, и наверно самая "ускорительная" - это таблица разложений на множители, которая строится ОДИН раз в самом начале.
Она позволяет отказаться от построения разложений в каждом цикле проверки чисел - достаточно глянуть в таблице.
НО. (!) :(
Сейчас мы упёрлись в её размер.
Однако если таблицу не строить, а просто каждый раз раскладывать на множители, тогда без Крэя точно не обойдёмся - считать будет месяцами.
Резюмо: нужно ещё кое-чего-нибудь соптимизировать. :)
Думаю.
Думаю.
Радикального пока ничего не надумал. Но удалось продвинуться до 5000
2011.01.15 21:08:46 MetaSage (EURUSD,M1) //+---- Максимальная сумма = 5000 -------------------+
2011.01.15 21:08:29 MetaSage (EURUSD,M1) S=373; P=19776; a=64; b=309
2011.01.15 21:08:29 MetaSage (EURUSD,M1) S=343; P=9952; a=32; b=311
2011.01.15 21:08:29 MetaSage (EURUSD,M1) S=233; P=916; a=4; b=229
2011.01.15 21:08:29 MetaSage (EURUSD,M1) S=163; P=4192; a=32; b=131
2011.01.15 21:08:29 MetaSage (EURUSD,M1) S=149; P=5494; a=67; b=82
2011.01.15 21:08:29 MetaSage (EURUSD,M1) S=137; P=4672; a=64; b=73
2011.01.15 21:08:29 MetaSage (EURUSD,M1) S=127; P=1776; a=16; b=111
2011.01.15 21:08:29 MetaSage (EURUSD,M1) S=89; P=1168; a=16; b=73
2011.01.15 21:08:29 MetaSage (EURUSD,M1) S=65; P=244; a=4; b=61
2011.01.15 21:08:29 MetaSage (EURUSD,M1) S=17; P=52; a=4; b=13
2011.01.15 21:08:29 MetaSage (EURUSD,M1) //+---- Максимальная сумма = 5000 -------------------+
2011.01.15 21:08:29 MetaSage (EURUSD,M1) //============== СТАРТ ========================
2011.01.15 21:07:58 MetaSage (EURUSD,M1) при 5000 SMax*(SMax/6-1) = 4160000
2011.01.15 21:07:40 MetaSage (EURUSD,M1) //+---- Максимальная сумма = 4700 -------------------+
2011.01.15 21:07:24 MetaSage (EURUSD,M1) S=373; P=19776; a=64; b=309
2011.01.15 21:07:24 MetaSage (EURUSD,M1) S=343; P=9952; a=32; b=311
2011.01.15 21:07:23 MetaSage (EURUSD,M1) S=233; P=916; a=4; b=229
2011.01.15 21:07:23 MetaSage (EURUSD,M1) S=163; P=4192; a=32; b=131
2011.01.15 21:07:23 MetaSage (EURUSD,M1) S=137; P=4672; a=64; b=73
2011.01.15 21:07:23 MetaSage (EURUSD,M1) S=127; P=1776; a=16; b=111
2011.01.15 21:07:23 MetaSage (EURUSD,M1) S=89; P=1168; a=16; b=73
2011.01.15 21:07:23 MetaSage (EURUSD,M1) S=65; P=244; a=4; b=61
2011.01.15 21:07:23 MetaSage (EURUSD,M1) S=17; P=52; a=4; b=13
2011.01.15 21:07:23 MetaSage (EURUSD,M1) //+---- Максимальная сумма = 4700 -------------------+
2011.01.15 21:07:23 MetaSage (EURUSD,M1) //============== СТАРТ ========================
2011.01.15 21:06:56 MetaSage (EURUSD,M1) при 4700 SMax*(SMax/6-1) = 3675400
.
Основные идеи оптимизации бродят вокруг сокращения размера таблицы за счёт хранения в ячейках только первого сомножителя, а следующие получать динамически по ссылке в той же таблице.
Однако это экономия пространства защёт времени, которое будет, конечно, меньше, чем в случае построения ряда сомножителей каждый раз с нуля, однако всё равно существенно больше чем сейчас.
Думаю ешё.
Не. Не буду делать обмена пространства на время. Даже при при текущей скорострельности 6900 считает около 3 минут. // Наврал, около 2х :)
В случае же ссылочных обращений к таблице количество расчётов квадратично возрастёт.
Правда при вычислении кажный раз влоб возрастание експоненциально, но этим можно разве что погордиться, всё равно тормоз получится.
2011.01.15 21:33:44 MetaSage (EURUSD,M1) //+---- Максимальная сумма = 6900 -------------------+
2011.01.15 21:33:04 MetaSage (EURUSD,M1) S=373; P=19776; a=64; b=309
2011.01.15 21:33:04 MetaSage (EURUSD,M1) S=343; P=9952; a=32; b=311
2011.01.15 21:33:04 MetaSage (EURUSD,M1) S=233; P=916; a=4; b=229
2011.01.15 21:33:04 MetaSage (EURUSD,M1) S=217; P=11392; a=89; b=128
2011.01.15 21:33:04 MetaSage (EURUSD,M1) S=163; P=4192; a=32; b=131
2011.01.15 21:33:04 MetaSage (EURUSD,M1) S=137; P=4672; a=64; b=73
2011.01.15 21:33:04 MetaSage (EURUSD,M1) S=127; P=1776; a=16; b=111
2011.01.15 21:33:04 MetaSage (EURUSD,M1) S=89; P=1168; a=16; b=73
2011.01.15 21:33:04 MetaSage (EURUSD,M1) S=65; P=244; a=4; b=61
2011.01.15 21:33:04 MetaSage (EURUSD,M1) S=17; P=52; a=4; b=13
2011.01.15 21:31:48 MetaSage (EURUSD,M1) При SMax=6900 PMax = SMax*(uint)(SMax/6-1) = 7928100
2011.01.15 21:31:46 MetaSage (EURUSD,M1) //+---- Максимальная сумма = 6900 -------------------+
2011.01.15 21:31:46 MetaSage (EURUSD,M1) //============== СТАРТ ========================
При 7000 - Error 4004: "ArrayResize(): Количество запрошенной памяти превышает два гига. Вам нужно быть скромнее."
Ежли у кого-то из присутствующих есть 64х разрядник + Win64 + MT5 64x + гигов 8 памяти, можно продвинуться тыщ до 10, потом всё равно облом.
Предлагаю на этом остановиться. Собсно исходные Мудрецы уже давно в попе.
Ага, можно остановиться, это точно. Ты и так чудо создал, которое Крей перепрыгнуло.
А все-таки закономерность насчет чисел остается, т.е. одно из них - степень двойки. Но есть сомнительные случаи - когда нечетное число не простое:
S=127; P=1776; a=16; b=111
S=373; P=19776; a=64; b=309.
1. Ага, можно остановиться, это точно. Ты и так чудо создал, которое Крей перепрыгнуло.
2. А все-таки закономерность насчет чисел остается, т.е. одно из них - степень двойки. Но есть сомнительные случаи - когда нечетное число не простое:
S=127; P=1776; a=16; b=111
S=373; P=19776; a=64; b=309.
1. Согласен. :)
2. Предлагаешь проверить на компе? Можно, только распечатка длинноватая получится. Щас соображу.
Я доделаю и уточню свою функцию проверки сумм для произвольного ограничения. Есть такое впечатление, что с ростом ограничения решения будут все реже.
Не факт:
2011.01.15 22:52:56 MetaSage (EURUSD,M1) //+---- Максимальная сумма = 8000 -------------------+
2011.01.15 22:51:55 MetaSage (EURUSD,M1) S=373; P=19776; a=64; b=309
2011.01.15 22:51:55 MetaSage (EURUSD,M1) S=343; P=9952; a=32; b=311
2011.01.15 22:51:55 MetaSage (EURUSD,M1) S=247; P=1912; a=8; b=239
2011.01.15 22:51:55 MetaSage (EURUSD,M1) S=233; P=916; a=4; b=229
2011.01.15 22:51:55 MetaSage (EURUSD,M1) S=217; P=11392; a=89; b=128
2011.01.15 22:51:55 MetaSage (EURUSD,M1) S=185; P=724; a=4; b=181
2011.01.15 22:51:55 MetaSage (EURUSD,M1) S=179; P=2608; a=16; b=163
2011.01.15 22:51:55 MetaSage (EURUSD,M1) S=163; P=4192; a=32; b=131
2011.01.15 22:51:55 MetaSage (EURUSD,M1) S=137; P=4672; a=64; b=73
2011.01.15 22:51:55 MetaSage (EURUSD,M1) S=127; P=1776; a=16; b=111
2011.01.15 22:51:55 MetaSage (EURUSD,M1) S=89; P=1168; a=16; b=73
2011.01.15 22:51:55 MetaSage (EURUSD,M1) S=65; P=244; a=4; b=61
2011.01.15 22:51:55 MetaSage (EURUSD,M1) S=17; P=52; a=4; b=13
2011.01.15 22:50:34 MetaSage (EURUSD,M1) При SMax=8000 PMax = SMax*(SMax/8-1) = 7992000
2011.01.15 22:50:33 MetaSage (EURUSD,M1) //+---- Максимальная сумма = 8000 -------------------+
2011.01.15 22:50:33 MetaSage (EURUSD,M1) //============== СТАРТ ========================
Уже тринадцать решений.
Не факт. Это кандидаты на решения. Ты ж сам с этим согласился. И "решения" с составным нечетным меня сильно напрягают - хотя обосновать это подозрение не могу.
Но тенденция радует. Ты приближаешься к 10 тыщам. Мудрецам - мудрецово, а нам - программистово.
1. Не факт. Это кандидаты на решения. Ты ж сам с этим согласился. И "решения" с составным нечетным меня сильно напрягают - хотя обосновать это подозрение не могу.
2. Но тенденция радует. Ты приближаешься к 10 тыщам.
1. Я согласился неподумавши. С тех пор я в свой скрипт уверовал ужо значительно сильнее. :)
Ибо при попытке сделать "проверяльщик", я столкнулся с тем, что проверять собсно нечего - всё правильно работает.
Однако можно таки сделать распечатывальщик - например щоб мехматский форум засрать портянками... :))))
// Ну и тебя заодно успокоить. ;)
Надо только сообразить, что именно распечатывать.
2. Так и есть. Получите распишитесь.
2011.01.15 23:18:16 MetaSage (EURUSD,M1) //+---- Максимальная сумма = 10000 -------------------+
2011.01.15 23:16:31 MetaSage (EURUSD,M1) S=373; P=19776; a=64; b=309
2011.01.15 23:16:30 MetaSage (EURUSD,M1) S=343; P=9952; a=32; b=311
2011.01.15 23:16:30 MetaSage (EURUSD,M1) S=247; P=1912; a=8; b=239
2011.01.15 23:16:30 MetaSage (EURUSD,M1) S=233; P=916; a=4; b=229
2011.01.15 23:16:30 MetaSage (EURUSD,M1) S=217; P=11392; a=89; b=128
2011.01.15 23:16:30 MetaSage (EURUSD,M1) S=191; P=8128; a=64; b=127
2011.01.15 23:16:30 MetaSage (EURUSD,M1) S=185; P=724; a=4; b=181
2011.01.15 23:16:30 MetaSage (EURUSD,M1) S=179; P=2608; a=16; b=163
2011.01.15 23:16:30 MetaSage (EURUSD,M1) S=163; P=4192; a=32; b=131
2011.01.15 23:16:30 MetaSage (EURUSD,M1) S=137; P=4672; a=64; b=73
2011.01.15 23:16:30 MetaSage (EURUSD,M1) S=127; P=1776; a=16; b=111
2011.01.15 23:16:30 MetaSage (EURUSD,M1) S=89; P=1168; a=16; b=73
2011.01.15 23:16:30 MetaSage (EURUSD,M1) S=65; P=244; a=4; b=61
2011.01.15 23:16:30 MetaSage (EURUSD,M1) S=17; P=52; a=4; b=13
2011.01.15 23:15:36 MetaSage (EURUSD,M1) При SMax=10000 PMax = SMax*(SMax/16-1) = 6240000
2011.01.15 23:15:34 MetaSage (EURUSD,M1) //+---- Максимальная сумма = 10000 -------------------+
2011.01.15 23:15:34 MetaSage (EURUSD,M1) //============== СТАРТ ========================
Победную версию скрипта прилагаю.
Обрати внимание, что в моем последнем куске доказательства для сумм менее 100 оставались только 4 суммы: 17, 29, 41, 53. Все они - простые (наверно, это случайно), и, кроме того, представимы единственным образом в виде 2^n+prime (а вот это уже не случайно). Это меня и напрягает, когда смотрю на твои варианты решений.
А что ты хранишь в своей большой таблице? Такое впечатление, что там много лишнего. Ну куда мудрецам 5 миллионов чисел в голове?
Нашел в инете первые 1000 простых - примерно до 8 тысяч.