Message boards :
Cafe :
Распараллеливание вложенных циклов
Message board moderation
Author | Message |
---|---|
![]() ![]() Send message Joined: 6 Apr 17 Posts: 15208 Credit: 0 RAC: 0 |
Итак, я начинаю :) Много думала над этим вопросом. Точнее: мозг думал в автономном режиме. Время от времени всплывало что-то, что мозг "произвёл". А недавно обсудила этот вопрос с одним форумчанином с форума Math Help Planet. Не буду называть его ник; дальше буду писать - коллега. Очень интересное получилось обсуждение! Увы, коллега вынес резюме: "Объяснять вы не умеете от слова "совсем". Ну-у-у... Мне кажется, что это неверное резюме. В общем, выложила я ему таблицу prove by 71#: [2, 3, 5, 7, 11, 13, 17, 19, 23, 29, 31, 37, 41, 43, 47, 53, 59, 61, 67, 71] 2 1 [1] 3 2 [1,2] 5 2 [2,3] 7 2 [2,3] 11 2 [3,10] 13 2 [9,11] 17 4 [6,7,8,9] 19 8 [1,3,4,6,8,9,17,18] 23 8 [4,6,7,9,15,16,20,21] 29 14 [1,4,6,7,8,9,10,11,12,13,14,15,17,20] 31 14 [2,6,11,15,16,17,18,19,20,21,22,23,24,28] 37 20 [2,3,4,5,7,9,10,12,14,15,16,17,20,23,24,26,30,32,33,36] 41 24 [2,4,7,10,11,13,15,18,19,20,21,22,23,24,25,26,27,28,29,32,34,36,37,40] 43 26 [1,4,5,6,8,10,12,13,14,17,21,23,25,26,27,28,29,30,31,32,33,34,35,36,38,40] 47 30 [2,3,5,6,7,8,9,12,13,16,17,18,20,22,24,25,26,29,30,33,34,35,36,37,39,40,43,44,45,46] 53 36 [1,2,4,5,6,7,10,11,12,13,14,15,18,19,20,21,23,24,26,27,28,30,32,34,35,36,3 7,41,42,43,44,46,48,50,51,52] 59 42 [1,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,22,24,25,26,29,30,31,33,36,37,3 8,39,40,41,42,43,44,45,46,47,48,49,50,54,56,58] 61 44 [1,3,5,6,7,11,12,13,14,15,16,17,18,19,20,21,22,23,24,26,29,30,31,34,35,36, 39,41,42,43,44,45,46,47,48,49,50,51,52,53,54,58,59,60] 67 50 [2,3,4,5,6,7,9,10,11,12,13,15,16,17,18,19,21,22,23,24,25,26,29,30,32,33,35 ,36,37,38,39,40,41,42,46,47,48,49,53,54,55,56,57,58,59,60,62,63,65,66] 71 54 [1,2,3,4,6,7,8,10,11,12,13,14,15,17,18,19,20,21,23,24,25,26,27,29,30,31,32 ,33,34,36,37,38,40,41,42,43,45,46,48,49,51,53,54,55,56,59,60,61,62,64,66,67,69,70] 107981681700372480000 formulae expected И говорю: это вложенные циклы. Он отвечает: "Это не циклы, как я понимаю циклы в программировании". Я отвечаю: "Ну да, это данные для циклов, а не запись самих циклов." Дальше поясняю, что такое - данные для циклов. Первое число - модуль. Второе число - количество разрешённых остатков. И далее в квадратных скобках сами разрешённые остатки. Он это объяснение проигнорировал и опять пишет: "В циклах нет таких понятий, как модуль, разрешённые остатки. Эти понятия взяты вообще не из программирования." Одним словом, мне не удалось донести до него вложенные циклы, которые собираюсь распараллеливать. Наше обсуждение на этом закончилось. Я рекомендовала ему посмотреть мою тему на форуме MHP https://mathhelpplanet.com/viewtopic.php?f=59&t=77621 Она как раз об этом. Может, объяснения форумчанина в этой теме ему покажутся понятными, если мои объяснения совсем непонятны. Кстати, тему зачем-то переименовала самодура модераторша; я так тему не называла! И засунула её в раздел "Объявления участников форума". Как только она надо мной не изгалялась! |
![]() ![]() Send message Joined: 6 Apr 17 Posts: 15208 Credit: 0 RAC: 0 |
Давайте посмотрим на простенький пример из указанной выше темы с форума MHP 2: (1) 3: (2,1) 5: (3,2) 7: (3,2) 11: (10,3) 13: (11,9) 17: (9,8,7,6) Здесь модулей поменьше, соответственно и вложенных циклов поменьше. Модули - это простые числа по порядку. Количество разрешённых остатков здесь не указано. Сами разрешённые остатки указаны в круглых скобках. Я предлагала коллеге рассмотреть простой пример, но он сказал: "Давайте закончим. Объяснять вы не умеете ...". Ну, закончили, значит :) А чего здесь объяснять-то? По-моему и ежу понятно, где здесь вложенные циклы и как они считаются. Я объяснила коллеге, что в циклах вычисляются некоторые числа (мы называем их добавки), которые определяются как раз приведёнными данными (модули и разрешённые остатки). Для вычисления добавок есть специальная функция в PARI/GP. Есть такая функция и в Вольфрам Альфа; очень давно я ею и пользовалась, тогда ещё не знала про функцию в PARI/GP. Но до функции мы не дошли :) Интересный момент: пока коллеге объясняла, в чём задача, решение начало проклёвываться в мозгу. Так иногда бывает. А вам господа, понятно, о каких вложенных циклах идёт речь? Буду рада, если отзовётесь. |
![]() ![]() Send message Joined: 6 Apr 17 Posts: 15208 Credit: 0 RAC: 0 |
Ну, распараллеливать вложенные циклы показанного простого примера нет никакой надобности, они и без распараллеливания быстро считаются. Здесь будет всего 128 формул (добавок). Их можно вычислить один раз и сохранить, а потом пользоваться ими всегда, а не вычислять каждый раз заново. В той программе, которую пишу сейчас, всё гораздо сложнее. |
![]() ![]() Send message Joined: 6 Apr 17 Posts: 15208 Credit: 0 RAC: 0 |
Посмотрите, пожалуйста, на картинку на главной странице BOINC-проекта SPT ![]() Вы увидите на ней ту самую функцию в PARI/GP, которая вычисляет добавки. Увидели? Вторая строка. В этой функции указываются модули и соответствующие разрешённые остатки. При этом берётся набор всех модулей и все комбинации разрешённых остатков. Вот они и циклы. Mod(1,2) означает разрешённый остаток 1 для модуля 2. Mod(2,3) означает разрешённый остаток 2 для модуля 3. И так далее. |
![]() ![]() Send message Joined: 6 Apr 17 Posts: 15208 Credit: 0 RAC: 0 |
Для этого примера 2: (1) 3: (2,1) 5: (3,2) 7: (3,2) 11: (10,3) 13: (11,9) 17: (9,8,7,6) функция для вычисления первой добавки запишется так lift(chinese([Mod(1,2),Mod(2,3),Mod(3,5),Mod(3,7),Mod(10,11),Mod(11,13),Mod(9,17)])) Разрешённые остатки взяты так, как они указаны в круглых скобках. Вычисленная этой функцией добавка равна 29963. Давайте напишем функцию для вычисления второй добавки lift(chinese([Mod(1,2),Mod(2,3),Mod(3,5),Mod(3,7),Mod(10,11),Mod(11,13),Mod(8,17)])) Вычисленная добавка равна 90023. Наконец, для вычисления последней (128-й) добавки функция запишется так lift(chinese([Mod(1,2),Mod(1,3),Mod(2,5),Mod(2,7),Mod(3,11),Mod(9,13),Mod(6,17)])) Вычисленная этой функцией добавка равна 480307. Господа, это понятно объяснила? |
![]() ![]() Send message Joined: 6 Apr 17 Posts: 15208 Credit: 0 RAC: 0 |
Кстати, здесь https://mathhelpplanet.com/viewtopic.php?p=445508#p445508 форумчанин выложил 128 добавок для приведённого простого примера. Это вычислила его программа, написанная на Питоне. Интересно, что у него добавки вычислены в порядке возрастания. Может, он их после вычисления отсортировал? В общем случает добавки вычисляются не по порядку. |
![]() ![]() Send message Joined: 6 Apr 17 Posts: 15208 Credit: 0 RAC: 0 |
Ну, с простым примером всё вроде понятно. Не знаю, как вам, а мне понятно :) Теперь перехожу к текущему варианту программы. Здесь паттерн 23-ки и период равен 71#. Рассмотрим сначала для одного паттерна (а не сразу для 88 паттернов), вот для этого [0, 24, 78, 84, 90, 108, 120, 150, 168, 174, 198, 204, 210, 234, 240, 258, 288, 300, 318, 324, 330, 384, 408] Таблица данных для вложенных циклов prove by 71#: [2, 3, 5, 7, 11, 13, 17, 19, 23, 29, 31, 37, 41, 43, 47, 53, 59, 61, 67, 71] [1] [1, 2] [3, 4] [2, 3] [3, 7] [3, 5] [8, 9] [1, 9] [1, 5, 12, 17] [4, 7, 10, 11, 12, 13, 14, 15, 16, 17, 20, 23] [1, 2, 6, 20, 24, 25, 27, 28, 29, 30] [2, 4, 5, 6, 7, 10, 14, 16, 20, 22, 26, 29, 30, 31, 32, 34] [5, 8, 9, 11, 13, 16, 18, 19, 20, 21, 22, 23, 24, 25, 27, 30, 32, 34, 35, 38] [6, 7, 10, 12, 15, 16, 23, 25, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 4 0, 42] [2, 3, 6, 7, 8, 9, 12, 13, 17, 18, 19, 22, 26, 27, 28, 30, 32, 34, 35, 36, 40, 4 3, 44, 45] [1, 3, 4, 5, 6, 10, 11, 12, 13, 15, 17, 19, 20, 21, 23, 24, 26, 27, 32, 33, 34, 35, 36, 37, 42, 43, 45, 46, 48, 49, 50, 52] [1, 4, 6, 8, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 25, 31, 33, 39, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, 52, 53, 56, 58] [1, 3, 6, 7, 8, 11, 12, 13, 16, 18, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 35, 39, 41, 45, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60] [1, 2, 4, 6, 7, 8, 9, 12, 13, 15, 16, 19, 20, 21, 22, 23, 24, 25, 29, 30, 31, 32 , 36, 37, 38, 39, 40, 41, 42, 45, 46, 48, 49, 52, 53, 54, 55, 57, 59, 60, 62, 63 , 65, 66] [1, 2, 4, 5, 6, 7, 8, 10, 11, 12, 13, 14, 16, 17, 19, 20, 21, 23, 24, 27, 28, 29 , 30, 32, 33, 35, 36, 38, 40, 41, 43, 46, 48, 49, 51, 53, 54, 56, 57, 59, 60, 61 , 62, 65, 66, 68, 69, 70] 959765417872588800 formulae expected Тут не указаны модули и количество разрешённых остатков. Сейчас я это исправлю. Сами разрешённые остатки в квадратных скобках. Количество формул (добавок) 959765417872588800 formulae expected. |
![]() ![]() Send message Joined: 6 Apr 17 Posts: 15208 Credit: 0 RAC: 0 |
Ну, с модулями всё просто, они перечислены здесь prove by 71#: [2, 3, 5, 7, 11, 13, 17, 19, 23, 29, 31, 37, 41, 43, 47, 53, 59, 61, 67, 71] А разрешённые остатки просто надо посчитать в квадратных скобках и написать их количество для каждого модуля. |
![]() ![]() Send message Joined: 6 Apr 17 Posts: 15208 Credit: 0 RAC: 0 |
Таблица данных для вложенных циклов готова prove by 71#: [2, 3, 5, 7, 11, 13, 17, 19, 23, 29, 31, 37, 41, 43, 47, 53, 59, 61, 67, 71] 2 1 [1] 3 2 [1, 2] 5 2 [3, 4] 7 2 [2, 3] 11 2 [3, 7] 13 2 [3, 5] 17 2 [8, 9] 19 2 [1, 9] 23 4 [1, 5, 12, 17] 29 12 [4, 7, 10, 11, 12, 13, 14, 15, 16, 17, 20, 23] 31 10 [1, 2, 6, 20, 24, 25, 27, 28, 29, 30] 37 16 [2, 4, 5, 6, 7, 10, 14, 16, 20, 22, 26, 29, 30, 31, 32, 34] 41 20 [5, 8, 9, 11, 13, 16, 18, 19, 20, 21, 22, 23, 24, 25, 27, 30, 32, 34, 35, 38] 43 22 [6, 7, 10, 12, 15, 16, 23, 25, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 40, 42] 47 24 [2, 3, 6, 7, 8, 9, 12, 13, 17, 18, 19, 22, 26, 27, 28, 30, 32, 34, 35, 36, 40, 43, 44, 45] 53 32 [1, 3, 4, 5, 6, 10, 11, 12, 13, 15, 17, 19, 20, 21, 23, 24, 26, 27, 32, 33, 34, 35, 36, 37, 42, 43, 45, 46, 48, 49, 50, 52] 59 36 [1, 4, 6, 8, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 25, 31, 33, 39, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, 52, 53, 56, 58] 61 38 [1, 3, 6, 7, 8, 11, 12, 13, 16, 18, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 35, 39, 41, 45, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60] 67 44 [1, 2, 4, 6, 7, 8, 9, 12, 13, 15, 16, 19, 20, 21, 22, 23, 24, 25, 29, 30, 31, 32, 36, 37, 38, 39, 40, 41, 42, 45, 46, 48, 49, 52, 53, 54, 55, 57, 59, 60, 62, 63, 65, 66] 71 48 [1, 2, 4, 5, 6, 7, 8, 10, 11, 12, 13, 14, 16, 17, 19, 20, 21, 23, 24, 27, 28, 29, 30, 32, 33, 35, 36, 38, 40, 41, 43, 46, 48, 49, 51, 53, 54, 56, 57, 59, 60, 61, 62, 65, 66, 68, 69, 70] 959765417872588800 formulae expected Проверим 1*2*2*2*2*2*2*2*4*12*10*16*20*22*24*32*36*38*44*48 = 959765417872588800 Произведение всех количеств разрешённых остатков даёт количество формул (добавок). Всё верно, не ошиблась в подсчёте количеств разрешённых остатков. Вы можете проверить. |
![]() ![]() Send message Joined: 6 Apr 17 Posts: 15208 Credit: 0 RAC: 0 |
А теперь представьте, как можно вычислить и сохранить все 959765417872588800 добавок. Нереально. Ну, если есть мощный компьютер с хорошими ОЗУ и ПЗУ, можно, наверное. Но весьма проблематично. Поэтому в программе добавки генерируются и на лету проверяются в нужных формулах. И программа, разумеется, будет работать о-ч-е-н-ь долго, и поэтому я называю её "бесконечной". А теперь я хочу получить конечные программы путём распараллеливания. Мы с gris немного занимались этим вопросом. Получили некоторое распараллеливание, то есть разбили всю программу на несколько программ, в каждой из которых вычисляется часть всех добавок. Но разбиение получилось недостаточное, каждая частичная программа снова "бесконечная". Надо думать, как разбить на более мелкие части, чтобы программа на одну часть выполнялась за реальное время, а не была "бесконечной". Кстати, у Corporal работают 36 "бесконечных" программ; поиск 19-ки с минимальным диаметром в нулевом периоде на периоде 71#. Их было всего 52, 16 были запущены мной, но вылетели, когда компьютер завис. Да, очень трудно обеспечить "бесконечность". Интересно, как долго Corporal продержится. Смотрите тему о "бесконечных" программах https://boinc.progger.info/odlk/forum_thread.php?id=313 |
![]() ![]() Send message Joined: 6 Apr 17 Posts: 15208 Credit: 0 RAC: 0 |
А теперь самый интересный момент: пишу функцию для вычисления первой добавки по показанной выше таблице lift(chinese([Mod(1,2),Mod(1,3),Mod(3,5),Mod(2,7),Mod(3,11),Mod(3,13),Mod(8,17),Mod(1,19),Mod(1,23),Mod(4,29),Mod(1,31),Mod(2,37),Mod(5,41),Mod(6,43),Mod(2,47),Mod(1,53),Mod(1,59),Mod(1,61),Mod(1,67),Mod(1,71)])) Вычисленная добавка 47191807279675612082643403. Запускаю программу gris для определения номера добавки Программа выдаёт (15:15) gp > \r number_form_old.txt logfile = "number_form_old_res.txt" [0,24,78,84,90,108,120,150,168,174,198,204,210,234,240,258,288,300,318,324,330,384,408] pattern L=23 557940830126698960967415390 period [1, 2, 2, 2, 2, 2, 2, 2, 4, 12, 10, 16, 20, 22, 24, 32, 36, 38, 44, 48] form= 47191807279675612082643403 prs: [ 2, 3, 5, 7, 11, 13, 17, 19, 23, 29, 31, 37, 41, 43, 47, 53, 59, 61, 67, 71] frs: [ 1, 1, 3, 2, 3, 3, 8, 1, 1, 4, 1, 2, 5, 6, 2, 1, 1, 1, 1, 1] prm: [ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1] form number is 1 Да! Эта добавка первая form number is 1 Прекрасно! |
![]() ![]() Send message Joined: 6 Apr 17 Posts: 15208 Credit: 0 RAC: 0 |
Ну вот, решение о распараллеливании вложенных циклов уже почти на ладони :) Господа! А ведь интересная задачка. Очень жаль, что коллега с MHP не захотел её решать, то есть просто не захотел, а не потому. что плохо я объяснила, и он ничего не понял. gris у меня пропал :( Он бы заинтересовался этой задачкой, тем более что мы её уже решали с ним. Писал недели три назад, что приболел, что-то типа ОРЗ. Ну, ОРЗ сейчас может и ковидом оказаться. На форуме MHP не появляется с 19 апреля. |
![]() ![]() Send message Joined: 6 Apr 17 Posts: 15208 Credit: 0 RAC: 0 |
Господа! Если кто-то заинтересовался задачей, а писать здесь не может, пишите, пожалуйста, мне в домашний ящик. Адрес не изменился natalimak1@yandex.ru Программа большая и сложная, 88 паттернов 23-к в ней должны проверяться. |
![]() ![]() Send message Joined: 6 Apr 17 Posts: 15208 Credit: 0 RAC: 0 |
Пока я тут теоретизировала, одна из "бесконечных" программ нашла центральную 11-ку !!! Вот она красавица 515461785794534460064127353: [0, 30, 48, 54, 78, 84, 90, 114, 120, 138, 168] [0, 6, 36, 96, 102, 120, 132, 162, 180, 186, 210, 216, 222, 246, 252, 270, 300, 312, 330, 336, 396, 426, 432] Рядом с ней указан паттерн 23-ки, по которому она найдена. Ну, я ведь нисколько и не сомневалась, что центральная 11-ка найдётся. И не только центральная 11-ка. Жду центральную 13-ку. Это ручной проект, господа! Это поиск в 23-ах. И пока ещё не задействованы в поиске все 88 паттернов. |
![]() ![]() Send message Joined: 6 Apr 17 Posts: 15208 Credit: 0 RAC: 0 |
И ещё одна центральная 11-ка нашлась у меня от 23-к! 428548969620875213447637163: [0, 30, 48, 54, 78, 84, 90, 114, 120, 138, 168] [0, 30, 84, 90, 96, 114, 126, 156, 174, 180, 204, 210, 216, 240, 246, 264, 294, 306, 324, 330, 336, 390, 420] Замечательно! Это по другому паттерну нашлась центральная 11-ка. Я пока запустила на Ахиллесе-3 несколько потоков, в каждом "бесконечная" программа для одного паттерна. |
![]() ![]() Send message Joined: 6 Apr 17 Posts: 15208 Credit: 0 RAC: 0 |
Вот сняла центральные 9-ки с Ахиллеса-3, все различные, отсортированы, 114 штук; это найдено от 23-к 1303704553013120341978333, 6965011711112622409897093, 8993935518039227039504113, 10550754398128371860967973, 12218028520090092815229553, 13648371239685675482614063, 15300930083411722648292833, 15485157231007224217747183, 18316464971152997090886883, 18787379296655779518268453, 28592857979675931746469103, 41560657365012722249372953, 47976139211767158576608863, 54178131475873783460406763, 56446774241189063055648763, 56748475068290468099847103, 62067873467692603836214783, 62634009835437320375850193, 67486513969425512182876093, 68118771856208131938403963, 70124570645298372176257723, 73137065213078651250620593, 87698133411422639683422283, 89218454129122147966120423, 91124213299776878008542193, 96492937619612991466139023, 101727308330785674810327493, 118215801110330834950794193, 142402850129038571501623633, 148295617605157358633251393, 149830135939124019733453993, 151441043828069890579128883, 162512895180026427260233903, 165656594475438496857947413, 167312157610930616293854283, 171827408629417582174027333, 176250933259508465101868563, 182878611188323712978730853, 184067576541792216872122963, 185059478020175434741990363, 187520485296383298838172833, 197077777856499921131720863, 205798992077874334658293213, 206167779925234588179162883, 207979646728102993828809163, 212098689647151632059799503, 216580962370783354788714163, 224630390020906699819669573, 225967300707441567994484203, 236363681548051046358903973, 250367168273174598472226293, 260934083414158936657219783, 278971717233996053944316533, 281115211771256148768586543, 281155669933324696200790993, 282771586975287606688286233, 283320167989212209150319463, 283458248950532531924032423, 285268136796090661504025173, 287466468030139994920568683, 291429624871169872812559273, 297196937653383592499178943, 297937823205730836597413383, 302575835234780842418968723, 305354289553871276230391773, 323834640769523229010449223, 325711950474405506245929133, 326926764222560055124195063, 329384978047363149713706343, 330156818663710139388727333, 342273294603541145959664443, 348637833032886669023726413, 351829957145623674997258873, 354230043422130313249721803, 354305301833582225838386113, 362839274132106980549225323, 364857978462852505300234003, 377557184870668140817053013, 381229050585624535844670013, 381707852194710393858430363, 386747625200845251981597853, 401529312855886046924516863, 402275959229863458475990693, 413916844930469593865847133, 417956635086137546970365233, 425162552946188165810235973, 428548969620875213447637193, 432844243805563165602316183, 433176275062035177048200263, 433964729384987076707855863, 435992534753140406076469873, 445846364368302270052914673, 447227085355876736108368063, 450074047317211640691922993, 454592320944916630816564663, 459398035748129956508735143, 463438388188388570174091313, 470987520869251653139216783, 474040459028746778518884973, 476972856062538954128094523, 480993278159700959614415893, 482558163149097853194126643, 485836782665043826868866453, 487664226503099013091768483, 490018713282406353220189453, 503920572112855871746377043, 515461785794534460064127383, 518076657460934841835260133, 520434484085627883338551423, 532780141040293063236358933, 534658956614997652386022513, 546344456592909966558050923, 555500192090658955704648523, 555934352508320091214192723 Может, пригодятся для дальнейших исследований. Две из них матрёшечные, то есть продолжились до центральной 11-ки. Две центральные 11-ки показаны выше. |
![]() ![]() Send message Joined: 6 Apr 17 Posts: 15208 Credit: 0 RAC: 0 |
Над распараллеливанием мозг продолжает работать в автономном режиме :) То есть он думает, а я при этом занимаюсь другими делами. Надо ещё для каждого паттерна все данные найти для циклов. Программ у меня много, которые gris писал (для генерирования добавок). Одни программы выводят все данные, а другие - не все (не указаны модули и количества разрешённых остатков). Ну, эта проблема легко решается. |
![]() ![]() Send message Joined: 6 Apr 17 Posts: 15208 Credit: 0 RAC: 0 |
Ура! Мне удалось сочинить первую конечную часть работы вложенных циклов. Эта часть работала на Ахиллесе-3 всего 34 минуты. ? \r 23_71_0period_part.txt log = 1 (on) [logfile is "23_71_0period_part_res.txt"] sgenerirovano dobavok 92454912 time = 34min, 59,219 ms. В этой части сгенерировано добавок 92454912. В общем, я понимаю, как работают вложенные циклы и вручную могу сделать много конечных частей. Однако... сделать все части вручную проблематично. Надо придумать хоть какую-то автоматизацию. Это пока не придумывается. |
![]() ![]() Send message Joined: 6 Apr 17 Posts: 15208 Credit: 0 RAC: 0 |
Запустила часть побольше, в этой части по моим подсчётам должно сгенерироваться 2218917888 добавок (в 24 раза больше, чем в проверенной маленькой части). Соответственно и время должно увеличиться примерно в 24 раза, и это будет более 12 часов. Ну, я не в BOINC-проекте, так что мне можно такое время потратить на одну часть. Главное, что часть стала конечная, выполняется за реальное время. Ждём, что будет в этой части. Кстати, в первой маленькой части не найдены даже центральные девятки. Очень интересно экспериментировать! |
![]() ![]() Send message Joined: 6 Apr 17 Posts: 15208 Credit: 0 RAC: 0 |
Эх, вчера вечером в большой части сделала ошибку. Зря программа ночь крутилась. Сегодня утром исправила и запустила снова. Теперь центральные 9-ки пошли. Вроде всё нормально. Итак, всё определяется этими векторами (номер вектора соответствует модулю) v2=[1]; \\1 v3=[1, 2]; \\2 v5=[3, 4]; \\2 v7=[2, 3]; \\2 v11=[3, 7]; \\2 v13=[3, 5]; \\2 v17=[8, 9]; \\2 v19=[1, 9]; \\2 v23=[1, 5, 12, 17]; \\4 v29=[4, 7, 10, 11, 12, 13, 14, 15, 16, 17, 20, 23]; \\12 v31=[1, 2, 6, 20, 24, 25, 27, 28, 29, 30]; \\10 v37=[2, 4, 5, 6, 7, 10, 14, 16, 20, 22, 26, 29, 30, 31, 32, 34]; \\16 v41=[5, 8, 9, 11, 13, 16, 18, 19, 20, 21, 22, 23, 24, 25, 27, 30, 32, 34, 35, 38]; \\20 v43=[6, 7, 10, 12, 15, 16, 23, 25, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 40, 42]; \\22 v47=[2, 3, 6, 7, 8, 9, 12, 13, 17, 18, 19, 22, 26, 27, 28, 30, 32, 34, 35, 36, 40, 43, 44, 45]; \\24 v53=[1, 3, 4, 5, 6, 10, 11, 12, 13, 15, 17, 19, 20, 21, 23, 24, 26, 27, 32, 33, 34, 35, 36, 37, 42, 43, 45, 46, 48, 49, 50, 52]; \\32 v59=[1, 4, 6, 8, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 25, 31, 33, 39, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, 52, 53, 56, 58]; \\36 v61=[1, 3, 6, 7, 8, 11, 12, 13, 16, 18, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 35, 39, 41, 45, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60]; \\38 v67=[1, 2, 4, 6, 7, 8, 9, 12, 13, 15, 16, 19, 20, 21, 22, 23, 24, 25, 29, 30, 31, 32, 36, 37, 38, 39, 40, 41, 42, 45, 46, 48, 49, 52, 53, 54, 55, 57, 59, 60, 62, 63, 65, 66]; \\44 v71=[1, 2, 4, 5, 6, 7, 8, 10, 11, 12, 13, 14, 16, 17, 19, 20, 21, 23, 24, 27, 28, 29, 30, 32, 33, 35, 36, 38, 40, 41, 43, 46, 48, 49, 51, 53, 54, 56, 57, 59, 60, 61, 62, 65, 66, 68, 69, 70]; \\48 Закомментированы количества разрешённых остатков. Напомню: это для одного паттерна 23-ки, вот этого 0,24,78,84,90,108,120,150,168,174,198,204,210,234,240,258,288,300,318,324,330,384,408 Это самый первый паттерн в списке из 88 паттернов. Задаю циклы for(i47=1,24, for(i53=1,32, for(i59=1,36, for(i61=1,38, for(i67=1,44, for(i71=1,48, и функцию для вычисления добавок в таком виде lift(chinese([Mod(1,2),Mod(1,3),Mod(3,5),Mod(2,7),Mod(3,11),Mod(3,13),Mod(8,17),Mod(1,19),Mod(1,23),Mod(4,29),Mod(1,31),Mod(2,37),Mod(5,41),Mod(6,43),Mod(v47[i47],47),Mod(v53[i53],53),Mod(v59[i59],59),Mod(v61[i61],61),Mod(v67[i67],67),Mod(v71[i71],71)])) И всё! Конечная часть готова! Здесь будет сгенерировано 24*32*36*38*44*44 = 2218917888 добавок. Прекрасно! И эта часть должна работать на моём Ахиллесе примерно 13-14 часов. Она уже работает. Посмотрим, какое будет время. А дальше ещё ровно 21 раз делаем точно такие же части по этой линейке v43=[6, 7, 10, 12, 15, 16, 23, 25, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 40, 42]; \\22 Первый разрешённый остаток (6) уже задействован в текущей части. Ну вот, 22 конечные части сделала шутя. А теперь можно сделать такие же 22 конечные части для остальных 87 паттернов. Вручную делать программы на эти части очень нудно. А как сделать иначе? Как автоматизировать? Господа! У вас есть предложения? Всего, значит, почти готовы 22*88=1936 конечных частей. |
©2025 (C) Progger