[Архив!] Чистая математика, физика, химия и т.п.: задачки для тренировки мозгов, никак не связанные с торговлей - страница 452

 
Mathemat:

По большому счету надо снимать ограничения на сумму. Все рассуждения остаются по сути такими же, просто их больше.

Судя по тому, что в цитате челу потребовался Cray 1, его алгоритм был менее оптимизирован, чем твой :)

1. На сумму ограничения снималь нельзя - она часть задачи. При разных суммах получаются разные результаты.

2. Если по серьёзному - старался сильно. :)

Несколько фишек делают скрипт быстрым. Первая, и наверно самая "ускорительная" - это таблица разложений на множители, которая строится ОДИН раз в самом начале.

Она позволяет отказаться от построения разложений в каждом цикле проверки чисел - достаточно глянуть в таблице.

НО. (!) :(

Сейчас мы упёрлись в её размер.

Однако если таблицу не строить, а просто каждый раз раскладывать на множители, тогда без Крэя точно не обойдёмся - считать будет месяцами.

Резюмо: нужно ещё кое-чего-нибудь соптимизировать. :)

Думаю.

 
MetaDriver:

Думаю.

Радикального пока ничего не надумал. Но удалось продвинуться до 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.

 
Mathemat:

1. Ага, можно остановиться, это точно. Ты и так чудо создал, которое Крей перепрыгнуло.

2. А все-таки закономерность насчет чисел остается, т.е. одно из них - степень двойки. Но есть сомнительные случаи - когда нечетное число не простое:

S=127; P=1776; a=16; b=111

S=373; P=19776; a=64; b=309.

1. Согласен. :)

2. Предлагаешь проверить на компе? Можно, только распечатка длинноватая получится. Щас соображу.

 
Я доделаю и уточню свою функцию проверки сумм для произвольного ограничения. Есть такое впечатление, что с ростом ограничения решения будут все реже.
 
Mathemat:
Я доделаю и уточню свою функцию проверки сумм для произвольного ограничения. Есть такое впечатление, что с ростом ограничения решения будут все реже.

Не факт:

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) //============== СТАРТ ========================

Уже тринадцать решений.

 
MetaDriver: Уже тринадцать решений.

Не факт. Это кандидаты на решения. Ты ж сам с этим согласился. И "решения" с составным нечетным меня сильно напрягают - хотя обосновать это подозрение не могу.

Но тенденция радует. Ты приближаешься к 10 тыщам. Мудрецам - мудрецово, а нам - программистово.

 
Mathemat:

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 тысяч.

Причина обращения: