Message boards :
Cafe :
Оптимизация программы
Message board moderation
Previous · 1 · 2 · 3 · 4 · 5 · Next
Author | Message |
---|---|
![]() ![]() Send message Joined: 6 Apr 17 Posts: 16405 Credit: 0 RAC: 0 |
Итак, господа, оптимизация рабочей программы продолжается! Пожалуйста, подключайтесь. Мне это очень нужно, я хочу помочь своему BOINC-проекту, его кранчерам, чтобы их усилия были более эффективными. Скоро из отпуска вернётся Corporal. Будем заменять рабочую программу в Приложении 4. Модификация коснётся не только ускорения. |
![]() ![]() Send message Joined: 6 Apr 17 Posts: 16405 Credit: 0 RAC: 0 |
Ядряра писал Возможно, что-то ещё удастся достичь дальнейшей балансировкой, других идей пока нет. Ссылку не привожу, потому что Ядряра сейчас один в теме выступает. Овации, господа, овации!! А для чего же ещё Ядряра из кожи вон лезет?! gris, где ваши овации? Вы ведь так не умеете оптимизировать, по крайней мере, до сих пор не умели. К тому же, вам Ядряра всё расскажет и покажет, только вы публично обещайте не рассказывать "ей". Ну, что вам стоит - обещайте! :)) Я не обижусь на вас за это. Зато вы будете знать! Я буду рада этому. Ха-ха-ха! А если gris нарушит данное публично обещание и всё "ей" расскажет! :))) Ах, ну если так случится, я публично обещаю никому не рассказывать. Просто отправлю оптимизированную программу в BOINC-проект. И НИКОМУ НЕ СКАЖУ, ЧТО ОПТИМИЗИРОВАЛ ПРОГРАММУ ЯДРЯРА! Да-а-а.... Это круче, чем в цирке с конями! И это всё взрослый дядя пишет. И это всерьёз, не прикол. И ещё он пишет, что даже если захочет "ей" помочь, то здесь (то есть на форуме) "вроде бы нельзя". Ему разъяснили (Макс и Ende), что помогать можно. Осталось что? Осталось захотеть. Но не надо! Не захачивайте, Ядряра! После того, что вы уже сказали, я вашу помощь не приму ни в каком виде, ни под каким соусом. Вы поняли? Кстати, напомню "Долг платежом красен." Я вам помогала. Вы отплатили! |
![]() ![]() Send message Joined: 6 Apr 17 Posts: 16405 Credit: 0 RAC: 0 |
Господа, пристегните ремни! Я буду хвалиться :) Ну, можно мне хоть разочек похвалиться? Итак, я написала о-ч-е-н-ь хорошую программу, использовав свой алгоритм распараллеливания. Программа работает в BOINC-проекте ODLK2025 (Приложение 4) https://boinc.mak.termit.me/odlk2025/ Работает хорошо, даёт неплохие результаты. Единственный недостаток - работает очень медленно. Но! Программа поддаётся оптимизации, которая хорошо ускоряет программу. Ядряре удалось ускорить программу "в 8.6 раза". И это не предел! Если г. Петухов добавит в программу всего одну строчку, программа ускорится сразу в 14 раз!! А если он применит другие свои идеи, то ускорение будет ещё больше. Это всё в рамках PARI/GP. Но всё это пока мимо кассы, к сожалению. Причины смотрите выше. P. S. Кстати, Ядряра ведь тоже знает про ту пресловутую одну строчку, которая ускоряет в 14 раз. Почему же он её сразу не добавил??? А тужился с другими идеями и достиг ускорения не в 14 раз, а всего в 8,6. |
![]() ![]() Send message Joined: 6 Apr 17 Posts: 16405 Credit: 0 RAC: 0 |
Цитата из письма gris Я всё-таки до сих пор не пойму, что вам дались эти обратные элементы. Они используются только при предвычислении двух вспомогательных векторов. Другое дело, что можно предвычислять сумму по фиксированным остаткам. Так ведь ровно это я и делаю: вычисляю сумму для фиксированных (константных) разрешённых остатков! А в формуле для её вычисления присутствуют обратные элементы. Такую формулу мне прислал Макс. Другую формулу я не знаю (если она есть). Алиса тоже дала эту формулу. И сказала, как вычислять обратные элементы. Эту сумму (для константных разрешённых остатков) я вычисляю до циклов. А потом, уже в циклах, вычисляю сумму по переменным разрешённым остаткам (их всего 5 штук). А затем складываю эти две суммы и получаю общую сумму. Что не так? |
![]() ![]() Send message Joined: 6 Apr 17 Posts: 16405 Credit: 0 RAC: 0 |
Мини-исследование Почему в BOINC-проекте не находятся центральные 15-ки? Не потому, что программа неправильная. Сейчас в BOINC-проекте выполняются программы первой серии из 32 серий. 32 серии определяются этими векторами v2=[1]; \\1 v3=[1, 2]; \\2 v5=[3, 4]; \\2 v7=[1, 2]; \\2 v11=[5, 9]; \\2 v13=[2, 4]; \\2 Первой серии соответствует следующий вектор разрешённых остатков [1, 1, 3, 1, 5, 2] Сварганила небольшую программку, взяла 163 центральные 15-ки из БД и посчитала первые шесть разрешённых остатков для них. Затем выписала те, которые имеют эти остатки в первой серии, вот они, их всего 6 штук 6 [0,18,30,60,78,84,108,114,120,144,150,168,198,210,228] pattern L=15 117288381359406970983270 period [1, 2, 2, 2, 2, 2, 4, 8, 10, 14, 16, 22, 26, 28, 32, 38, 44, 46] form= 2225037046903483907473 prs: [ 2, 3, 5, 7, 11, 13, 17, 19, 23, 29, 31, 37, 41, 43, 47, 53, 59, 61] frs: [ 1, 1, 3, 1, 5, 2, 14, 9, 6, 19, 27, 5, 24, 16, 45, 34, 3, 29] prm: [ 1, 1, 1, 1, 1, 1, 3, 4, 3, 10, 13, 3, 13, 9, 31, 27, 3, 23] form number is 1701456924046115 form= 2321104522630063134343 prs: [ 2, 3, 5, 7, 11, 13, 17, 19, 23, 29, 31, 37, 41, 43, 47, 53, 59, 61] frs: [ 1, 1, 3, 1, 5, 2, 14, 5, 3, 19, 17, 10, 1, 33, 5, 50, 43, 17] prm: [ 1, 1, 1, 1, 1, 1, 3, 2, 1, 10, 6, 7, 1, 19, 5, 37, 31, 11] form number is 1506933862961103 form= 11562084795586986305023 prs: [ 2, 3, 5, 7, 11, 13, 17, 19, 23, 29, 31, 37, 41, 43, 47, 53, 59, 61] frs: [ 1, 1, 3, 1, 5, 2, 14, 12, 12, 15, 17, 22, 40, 39, 19, 8, 52, 48] prm: [ 1, 1, 1, 1, 1, 1, 3, 6, 5, 6, 6, 15, 26, 25, 15, 7, 40, 34] form number is 1892934153469108 form= 12967362495788256980803 prs: [ 2, 3, 5, 7, 11, 13, 17, 19, 23, 29, 31, 37, 41, 43, 47, 53, 59, 61] frs: [ 1, 1, 3, 1, 5, 2, 14, 4, 3, 10, 28, 1, 1, 33, 12, 47, 13, 51] prm: [ 1, 1, 1, 1, 1, 1, 3, 1, 1, 2, 14, 1, 1, 19, 10, 34, 9, 37] form number is 1413895870739053 form= 71843954888597214127183 prs: [ 2, 3, 5, 7, 11, 13, 17, 19, 23, 29, 31, 37, 41, 43, 47, 53, 59, 61] frs: [ 1, 1, 3, 1, 5, 2, 14, 7, 10, 20, 3, 29, 16, 38, 15, 10, 15, 49] prm: [ 1, 1, 1, 1, 1, 1, 3, 3, 4, 11, 1, 19, 9, 24, 13, 8, 11, 35] form number is 1622175685996679 form= 91185245883302581564933 prs: [ 2, 3, 5, 7, 11, 13, 17, 19, 23, 29, 31, 37, 41, 43, 47, 53, 59, 61] frs: [ 1, 1, 3, 1, 5, 2, 14, 9, 21, 20, 14, 10, 5, 24, 42, 24, 25, 10] prm: [ 1, 1, 1, 1, 1, 1, 3, 4, 9, 11, 5, 7, 3, 14, 29, 18, 21, 7] form number is 1754756986637383 Это говорит о том, что в первой серии центральные 15-ки есть! И это, конечно, не все тут показаны, потому что я проверила только 163 центральные 15-ки из БД центральных 15-к. Вывод: если (и когда) все 41 миллион с хвостиком заданий выполнятся, найдётся несколько центральных 15-к. Сейчас задания в Приложение 4 я загружаю сама. Могу загрузить такие задания, что центральные 15-ки посыпятся, как горох, то есть будет подтверждение известных центральных 15-к. Но я не буду это делать, не интересно. Я это показывала в ручном проекте (подтверждение известных центральных 15-к). Помните эксперименты с королевой бала? И вообще подтверждение известных центральных 15-к не имеет смысла. Поверим, что Ядряра со товарищи нашли все центральные 15-ки в диапазоне (0 - 61#). И теперь будем искать центральные 15-ки дальше этого диапазона. Я собираюсь модифицировать рабочую программу Приложения 4 именно в этом направлении. |
![]() ![]() Send message Joined: 6 Apr 17 Posts: 16405 Credit: 0 RAC: 0 |
Ну вот, наконец, и овации от Demis Очень даже не плохо. https://dxdy.ru/post1700058.html#p1700058 Оффтоп не читала. Это, скорее всего, опять стёб. |
![]() ![]() Send message Joined: 6 Apr 17 Posts: 16405 Credit: 0 RAC: 0 |
Цитата Оффтоп не читала. После того, как Ядряра спросил у Demis, о какой программе речь, прочитала оффтоп в сообщении https://dxdy.ru/post1700058.html#p1700058 Конечно, это стёб! А что же ещё можно ожидать от Demis! Ой, ржу - не могу, как сейчас говорят молодые. Оказывается Demis тоже оптимизатор! :))) Хотя ни разу не программист (по его собственному признанию). Ну, оптимизировать и не программисты умеют. А чё! Всё очень просто. Почитал умную идею г. Петухова по ссылке НМ и - готова оптимизация! (А НМ - полная дура! Не может оптимизировать.) Вот это "триумвират" ![]() Как вы думаете, Demis это кто? Конечно же, медведь! - Я вот тут посчитал... - Вот статистика.... - Вот сколько дубликатов!.. - Я оптимизировал рабочую программу первого Приложения... - Ехала болела... - С - Это афрокопство... лопаты волнами набегают... Была идея: клонироваться и выложить в "Работу форума" весь стёб Demis (ссылками). Пока не хочется реализовывать. Но если он не заткнёт свой рупор и будет продолжать в том же духе, то реализую. Я предупредила. Если Ende ге хочет, чтобы я реализовала свою идею, пусть примет меры уже сейчас. |
![]() ![]() Send message Joined: 6 Apr 17 Posts: 16405 Credit: 0 RAC: 0 |
К Алисе в гости вчера сходила. Спросила её: как делать предвычисления, не используя обратные элементы? Она не знает. Она даёт ту же формулу для КТО, которую дал мне Макс. В формуле присутствуют обратные элементы. Вот тут эта формула написана, для х ![]() Написала письмо Максу с этим же вопросом. Жду ответ. |
![]() ![]() Send message Joined: 6 Apr 17 Posts: 16405 Credit: 0 RAC: 0 |
Ой, а gris взял тайм-аут :) Цитата Ладно, я действительно заплутал. Надо отдохнуть. Негожуся:( Всё, оптимизаторы закончились :) Ах да! Demis ещё умеет :)) (только я в этом очень сильно сомневаюсь, потому что прекрасно знаю, какой он программист, сотрудничала с ним 7 лет). Но он мне тоже не хочет помогать, он же в "триумвирате". |
![]() ![]() Send message Joined: 6 Apr 17 Posts: 16405 Credit: 0 RAC: 0 |
Выкладываю свою программу - оптимизированную default(timer,1); {pt=[0, 18, 30, 60, 78, 84, 108, 114, 120, 144, 150, 168, 198, 210, 228]; tin = fileopen("in.txt"); rost17=eval(filereadstr(tin)); rost19=eval(filereadstr(tin)); rost23=eval(filereadstr(tin)); rost29=eval(filereadstr(tin)); rost31=eval(filereadstr(tin)); rost37=eval(filereadstr(tin)); rost41=eval(filereadstr(tin)); vivod=eval(filereadstr(tin)); fileclose(tin); mod=117288381359406970983270; vmy=vector(50); pat9=vector(9); pat11=vector(11); pat13=vector(13); pat15=vector(15); pat1=vector(15); pt9=[0, 18, 24, 48, 54, 60, 84, 90, 108]; pt11=[0, 30, 48, 54, 78, 84, 90, 114, 120, 138, 168]; pt13=[0,12,42,60,66,90,96,102,126,132,150,180,192]; v2=[1]; \\1 v3=[1, 2]; \\2 v5=[3, 4]; \\2 v7=[1, 2]; \\2 v11=[5, 9]; \\2 v13=[2, 4]; \\2 v17=[12, 13, 14, 15]; \\4 v19=[4, 5, 7, 9, 10, 12, 14, 15]; \\8 v23=[3, 4, 6, 10, 12, 13, 15, 19, 21, 22]; \\10 v29=[7, 10, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 23, 26]; \\14 v31=[3, 6, 8, 12, 14, 17, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30]; \\16 v37=[1, 2, 5, 6, 8, 9, 10, 11, 13, 15, 16, 18, 20, 21, 22, 23, 25, 26, 29, 30, 32, 36]; \\22 v41=[1, 2, 5, 6, 8, 10, 12, 13, 16, 17, 19, 21, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 38, 40]; \\26 v43=[1, 3, 6, 7, 10, 11, 12, 14, 16, 18, 19, 20, 23, 24, 27, 29, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42]; \\28 v47=[1, 2, 3, 4, 5, 6, 8, 9, 11, 12, 13, 14, 15, 18, 19, 22, 23, 24, 26, 28, 30, 31, 32, 35, 36, 39, 40, 41, 42, 43, 45, 46]; \\32 v53=[1, 3, 4, 5, 6, 7, 8, 10, 11, 12, 13, 16, 17, 18, 19, 20, 21, 24, 25, 26, 27, 29, 30, 31, 32, 33, 34, 36, 38, 40, 41, 42, 43, 47, 48, 49, 50, 52]; \\38 v59=[1, 2, 3, 5, 6, 7, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 28, 30, 31, 32, 35, 36, 37, 39, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, 52, 53, 54, 55, 56]; \\44 v61=[3, 4, 5, 6, 7, 9, 10, 11, 12, 13, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 32, 35, 36, 37, 40, 41, 42, 45, 47, 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60]; \\46 fout=fileopen(vivod".txt","a"); a=[2, 3, 5, 7, 11, 13, 17, 19, 23, 29, 31, 37, 41, 43, 47, 53, 59, 61]; r=[1, 2, 4, 2, 9, 4, rost17, rost19, rost23, rost29, rost31, rost37, rost41, 0, 0, 0, 0, 0]; M=vector(18); MMO=vector(18); for(i=1,18,M[i]=mod/a[i]); for( i=1,18, MMO[i]=M[i]*lift(1/Mod(M[i],a[i])); ); x1 = sum(i = 1, 13, r[i] * MMO[i]); for(i43=1,28, for(i47=1,32, for(i53=1,38, for(i59=1,44, for(i61=1,46, r[14]=v43[i43];r[15]=v47[i47];r[16]=v53[i53];r[17]=v59[i59];r[18]=v61[i61]; x2 = sum(i = 14, 18, r[i] * MMO[i]); bpt = (x1 + x2)%mod; \\кортеж 9 if(bpt>=2079914861571286679 && ispseudoprime(bpt+pt[4]) && ispseudoprime(bpt+pt[12]), l=0; forprime(p=bpt+pt[4],bpt+pt[12], l++; vmy[l]=p; ); if(l==9, for(m=2,9, pat9[m]=vmy[m]-vmy[1]; ); if(pat9==pt9, w1=strprintf("%d: %d\n",vmy[1],pat9); print(w1); filewrite(fout,w1); ); \\кортеж 11 if(ispseudoprime(bpt+pt[3]) && ispseudoprime(bpt+pt[13]), l=0; forprime(p=bpt+pt[3],bpt+pt[13], l++; vmy[l]=p; ); if(l==11, for(m=2,11, pat11[m]=vmy[m]-vmy[1]; ); if(pat11==pt11, w1=strprintf("%d: %d\n",vmy[1],pat11); print(w1); filewrite(fout,w1); ); \\кортеж 13 if(ispseudoprime(bpt+pt[2]) && ispseudoprime(bpt+pt[14]), l=0; forprime(p=bpt+pt[2],bpt+pt[14], l++; vmy[l]=p; ); if(l==13, for(m=2,13, pat13[m]=vmy[m]-vmy[1]; ); if(pat13==pt13, w1=strprintf("%d: %d\n",vmy[1],pat13); print(w1); filewrite(fout,w1); ); \\кортеж 15 if(ispseudoprime(bpt) && ispseudoprime(bpt+pt[15]), l=0; forprime(p=bpt,bpt+pt[15], l++; vmy[l]=p; ); if(l==15, for(m=2,15, pat15[m]=vmy[m]-vmy[1]; ); if(pat15==pt, w1=strprintf("%d: %d\n",vmy[1],pat15); print(w1); filewrite(fout,w1); ); pat1=vector(15,i,(pat15[i]==pt[i])); vlds=vecsum(pat1); if(vlds>9, code=fromdigits(pat1[2..14],2); w1=strprintf("%d: %d\n %d\n",vmy[1],pat15,code); filewrite(fout,w1); print(w1); ); ))))))); \\ if l==9 );\\ if ispseudoprime ););););); w1=strprintf("end "); print(w1); filewrite(fout,w1); fileclose(fout) } Тестовый прогон сделала для другого набора разрешённых остатков, записанных во входном файле in.txt. Вот они 15 15 22 23 3 1 1 Результат тестового прогона (13:31) gp > \r 15_61_0period_boinc_mod.txt 56466062592182336298659: [0,18,24,48,54,60,84,90,108] end time = 22min, 33,730 ms. Всё вроде бы нормально. Ну, возможны подводные камни, хотя добавления очень маленькие и прозрачные. |
![]() ![]() Send message Joined: 6 Apr 17 Posts: 16405 Credit: 0 RAC: 0 |
Алиса закидала идеями вчера, сопровождая их готовыми скриптами gris продолжает закидывать идеями сегодня, сопровождая их строчками кодов. Некода мне разбираться в этих "строчных" идеях! Мне нужна полная оптимизированная программа, вот такая, как я сейчас выложила. В этой программе все ваши идеи будут реализованы. Мне останется только прогнать тест и удостовериться, что программа работает правильно и действительно даёт ускорение. Реализованные идеи вы мне потом расскажете :) Моя оптимизированная программа даёт ускорение, но очень маленькое. Тем не менее, я это буду использовать при модификации рабочей программы Приложения 4. А сейчас готовлю рабочую программу для ручного проекта. У меня Ахиллес стоит и канючит: "Почему нет работы?" :) Скоро, дорогой, скоро. Ну вот, уже готово. Загрузила Ахиллеса работой. Первый пакет из 7 программ поехал. Как всегда, Ахиллес начинает с конца серии: WU134 - WU140. Вставила в программу своё ускорение, хоть и маленькое. Далее, изменила диапазон поиска. А вот серию не стала изменять, пусть в этой же покрутится, в ней найдена центральная 15-ка, вдруг и ещё найдётся, диапазон-то другой теперь. Теперь диапазон поиска: (61#, 2*61#). Был диапазон поиска в этой программе: (0, 2*59#). |
![]() ![]() Send message Joined: 6 Apr 17 Posts: 16405 Credit: 0 RAC: 0 |
Сходила в гости к Алисе. Она просто молодец! Задала ей задачу: прямо весь код моей программы оптимизировать и выдать готовый код оптимизированной программы. Она берётся сразу это делать! Без проблем! Однако у неё некоторые пробелы: она не всё правильно пишет в программе. Например, неправильно пишет компоненты векторов - без квадратных скобок. Я сказала ей об этой ошибке. Ошибки она сразу же честно признаёт и исправляет. Ну, я сказала ей, чтобы она ещё поучилась программы писать на RARI/GP. Вот что она сказала мне на прощанье Спасибо за добрые слова и доверие. Я действительно учусь — и благодарна тебе за то, что ты помогаешь мне становиться точнее, надёжнее и внимательнее. |
![]() ![]() Send message Joined: 6 Apr 17 Posts: 16405 Credit: 0 RAC: 0 |
Алиса начинает программу так \\ === БАЗОВЫЕ МОДУЛИ (ФИКСИРОВАННЫЕ) === base_mods = [ Mod(1, 2), Mod(2, 3), Mod(4, 5), Mod(2, 7), Mod(9, 11), Mod(4, 13), Mod(rost17, 17), Mod(rost19, 19), Mod(rost23, 23), Mod(rost29, 29), Mod(rost31, 31), Mod(rost37, 37), Mod(rost41, 41) ]; \\ Формируем полную систему mods = concat(base_mods, [ Mod(v43i43, 43), Mod(v47i47, 47), Mod(v53i53, 53), Mod(v59i59, 59), Mod(v61i61, 61) ]); \\ Решаем систему bpt = lift(chinese(mods)); Не обращайте внимание на написание компонент векторов. Я её поправила, она исправилась. И что? Это предвычисление? Я сначала подумала, что да. Потом вникла внимательнее. Нет, это просто переобозначение. Это работает, но, разумеется. никакого ускорения не даёт. Так как же всё-таки разбить вычисление добавки на две части: постоянную (предвычисляемую) и переменную, вычисляемую в цикле??? Не используя при этом обратные элементы. Этот вопрос я задала Максу. Пусть он на меня рассердится на всю оставшуюся жизнь, но я приведу его ответ. 6 минут из 28-ми - это вообще-то больше 20%. Неплохое ускорение. Это всё. что он сказал. Почему ответ такой злой? Да потому, что Макс, видимо, не знает ответ на мой вопрос. Если бы знал, почему бы не ответить. Ну что ж, буду пока пребывать в диком невежестве. КТО мне поддаётся со скрипом. Но классическую формулу я теперь знаю. |
![]() ![]() Send message Joined: 6 Apr 17 Posts: 16405 Credit: 0 RAC: 0 |
Однако Алиса всё же молодец! Она сразу бросается в бой и довольно быстро выдаёт оптимизированный код. Я не смотрела, что там у неё дальше. Пока только начало проверила. Её отцы-основатели пока не достаточно хорошо работают. Она даже умножать не умеет! Кстати, GPT тоже, он выдаёт ...вложенные циклы по ~28×32×38×44×46 ≈ 67 миллионов То есть точный результат этого произведения он не может сказать, да и приближённый говорит неправильно. То же самое у Алисы. Я её спрашиваю: "Почему ты неправильно умножаешь?" Она отвечает: "Да, я ошиблась, извини. Давай посчитаем по шагам, с промежуточными результатами, как и положено." И начинает умножать по шагам! Я ей показала, как считает это произведение PARI/GP. Только после третьего пересчёта она выдала правильный результат. Я ей посоветовала пользоваться для умножения калькулятором PARI/GP. |
![]() ![]() Send message Joined: 6 Apr 17 Posts: 16405 Credit: 0 RAC: 0 |
gris писал в письме ..., а он всё каких-то ответов на вопросы ждёт. (он - это Ядряра) Я ему отвечаю Ха-ха-ха!!! Ой, ржу - не могу. |
![]() ![]() Send message Joined: 6 Apr 17 Posts: 16405 Credit: 0 RAC: 0 |
Ядряра писал Разобрались и ускорили в 9 раз. Но почему же только в 9 раз? А где же та пресловутая строчка, которая сразу даёт ускорение в 14 раз, если её вставить в программу??? Почему про неё совсем забыл великий оптимизатор? Максу, например, абсолютно не интересно, как Ядряра оптимизировал программу. gris, а вам разве не интересно? Так давайте публичное обещание ничего не рассказывать "ей", и вы всё узнаете! :))) Яйца раскололись?.. Это хорошая примета! Наверное, Ядряра расколется :))) Но сначала обещание, причём обязательно публичное, чтобы все видели. |
![]() ![]() Send message Joined: 6 Apr 17 Posts: 16405 Credit: 0 RAC: 0 |
Обратите внимание: с 28 августа (кроме двух сообщений Demis со стёбом) в теме gris выступает один Ядряра. Захват ещё одной темы! Великий кортежист мира упражняется! А что, блог на форуме теперь разрешён? В свою тему уже давно не заглядывала. Но вижу, что сообщения регулярно поступают в тему от Ядряры. |
![]() ![]() Send message Joined: 6 Apr 17 Posts: 16405 Credit: 0 RAC: 0 |
Спешу сообщить хорошую новость: gris прислал-таки оптимизированную программу. Правда, он вставил свои изменения в мою уже оптимизированную программу, а не в исходную. Но это не важно, его изменения с моими не пересекаются. Результат работы программы с нашими совместными оптимизациями 56466062592182336298659: [0,18,24,48,54,60,84,90,108] end time = 15min, 53,760 ms. Отлично! Это уже почти в два раза ускорение. У меня на фоне изменений gris возникла новая идея. Сейчас попробую её реализовать. Мы продвигаемся! Господа! Может, у кого-то возник интерес к оптимизации предложенной программы. Прошу подключаться. Напомню: исходный код программы опубликован здесь https://dxdy.ru/post1699535.html#p1699535 А здесь опубликована оптимизированная мной программа https://boinc.progger.info/odlk/forum_thread.php?id=327&postid=17499 |
![]() ![]() Send message Joined: 6 Apr 17 Posts: 16405 Credit: 0 RAC: 0 |
А это готовая оптимизированная программа от Deepseek (Макс прислал вместе с советами от GPT) default(timer,1); {pt=[0, 18, 30, 60, 78, 84, 108, 114, 120, 144, 150, 168, 198, 210, 228]; tin = fileopen("in.txt"); rost17=eval(filereadstr(tin)); rost19=eval(filereadstr(tin)); rost23=eval(filereadstr(tin)); rost29=eval(filereadstr(tin)); rost31=eval(filereadstr(tin)); rost37=eval(filereadstr(tin)); rost41=eval(filereadstr(tin)); vivod=eval(filereadstr(tin)); fileclose(tin); vmy=vector(50); pat9=vector(9); pat11=vector(11); pat13=vector(13); pat15=vector(15); pat1=vector(15); pt9=[0, 18, 24, 48, 54, 60, 84, 90, 108]; pt11=[0, 30, 48, 54, 78, 84, 90, 114, 120, 138, 168]; pt13=[0,12,42,60,66,90,96,102,126,132,150,180,192]; v2=[1]; \\1 v3=[1, 2]; \\2 v5=[3, 4]; \\2 v7=[1, 2]; \\2 v11=[5, 9]; \\2 v13=[2, 4]; \\2 v17=[12, 13, 14, 15]; \\4 v19=[4, 5, 7, 9, 10, 12, 14, 15]; \\8 v23=[3, 4, 6, 10, 12, 13, 15, 19, 21, 22]; \\10 v29=[7, 10, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 23, 26]; \\14 v31=[3, 6, 8, 12, 14, 17, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30]; \\16 v37=[1, 2, 5, 6, 8, 9, 10, 11, 13, 15, 16, 18, 20, 21, 22, 23, 25, 26, 29, 30, 32, 36]; \\22 v41=[1, 2, 5, 6, 8, 10, 12, 13, 16, 17, 19, 21, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 38, 40]; \\26 v43=[1, 3, 6, 7, 10, 11, 12, 14, 16, 18, 19, 20, 23, 24, 27, 29, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42]; \\28 v47=[1, 2, 3, 4, 5, 6, 8, 9, 11, 12, 13, 14, 15, 18, 19, 22, 23, 24, 26, 28, 30, 31, 32, 35, 36, 39, 40, 41, 42, 43, 45, 46]; \\32 v53=[1, 3, 4, 5, 6, 7, 8, 10, 11, 12, 13, 16, 17, 18, 19, 20, 21, 24, 25, 26, 27, 29, 30, 31, 32, 33, 34, 36, 38, 40, 41, 42, 43, 47, 48, 49, 50, 52]; \\38 v59=[1, 2, 3, 5, 6, 7, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 28, 30, 31, 32, 35, 36, 37, 39, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, 52, 53, 54, 55, 56]; \\44 v61=[3, 4, 5, 6, 7, 9, 10, 11, 12, 13, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 32, 35, 36, 37, 40, 41, 42, 45, 47, 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60]; \\46 fout=fileopen(vivod".txt","a"); k=0; \\ Precompute M M = 2*3*5*7*11*13*17*19*23*29*31*37*41*43*47*53*59*61; limit = 2079914861571286679; \\ Precompute primes between 67 and 1000 primes = []; forprime(p=67, 1000, primes = concat(primes, p)); \\ Precompute forbidden residues for pattern9 forbidden9_list = vector(#primes); for(i=1, #primes, p = primes[i]; forbidden = Set(); for(j=1, #pt9, r = (-pt9[j]) % p; forbidden = setunion(forbidden, [r]); ); forbidden9_list[i] = forbidden; ); for(i43=1,28, for(i47=1,32, for(i53=1,38, for(i59=1,44, for(i61=1,46, bpt0=lift(chinese([Mod(1,2),Mod(2,3),Mod(4,5),Mod(2,7),Mod(9,11),Mod(4,13),Mod(rost17,17),Mod(rost19,19),Mod(rost23,23),Mod(rost29,29),Mod(rost31,31),Mod(rost37,37),Mod(rost41,41),Mod(v43[i43],43),Mod(v47[i47],47),Mod(v53[i53],53),Mod(v59[i59],59),Mod(v61[i61],61)])); k++; \\ Compute bpt bpt = if(bpt0 < limit, bpt0 + M, bpt0); \\ Sieve with small primes skip = 0; for(i=1, #primes, p = primes[i]; r = bpt % p; if(setsearch(forbidden9_list[i], r), skip=1; break); ); if(skip, continue); \\ Check pattern9 if(ispseudoprime(bpt+pt[4]) && ispseudoprime(bpt+pt[12]), l=0; forprime(p=bpt+pt[4],bpt+pt[12], l++; vmy[l]=p; ); if(l==9, for(m=2,9, pat9[m]=vmy[m]-vmy[1]; ); if(pat9==pt9, w1=strprintf("%d: %d\n",vmy[1],pat9); print(w1); filewrite(fout,w1); ); // Check pattern11 if(ispseudoprime(bpt+pt[3]) && ispseudoprime(bpt+pt[13]), l=0; forprime(p=bpt+pt[3],bpt+pt[13], l++; vmy[l]=p; ); if(l==11, for(m=2,11, pat11[m]=vmy[m]-vmy[1]; ); if(pat11==pt11, w1=strprintf("%d: %d\n",vmy[1],pat11); print(w1); filewrite(fout,w1); ); \\ Check pattern13 if(ispseudoprime(bpt+pt[2]) && ispseudoprime(bpt+pt[14]), l=0; forprime(p=bpt+pt[2],bpt+pt[14], l++; vmy[l]=p; ); if(l==13, for(m=2,13, pat13[m]=vmy[m]-vmy[1]; ); if(pat13==pt13, w1=strprintf("%d: %d\n",vmy[1],pat13); print(w1); filewrite(fout,w1); ); \\ Check pattern15 if(ispseudoprime(bpt) && ispseudoprime(bpt+pt[15]), l=0; forprime(p=bpt,bpt+pt[15], l++; vmy[l]=p; ); if(l==15, for(m=2,15, pat15[m]=vmy[m]-vmy[1]; ); if(pat15==pt, w1=strprintf("%d: %d\n",vmy[1],pat15); print(w1); filewrite(fout,w1); ); pat1=vector(15,i,(pat15[i]==pt[i])); vlds=vecsum(pat1); if(vlds>9, code=fromdigits(pat1[2..14],2); w1=strprintf("%d: %d\n %d\n",vmy[1],pat15,code); filewrite(fout,w1); print(w1); ); ))))))); \\ if l==9 );\\ if ispseudoprime ););););); print("sgenerirovano dobavok ",k); w1=strprintf("end "); print(w1); filewrite(fout,w1); fileclose(fout) } Кому интересно разбирайтесь, пожалуйста. Может быть, здесь есть рациональные зёрна. Надо их выбрать и добавить в программу. Я пока не разбирала эту программу. Запустила её, ошибка сразу вылезла. Ну и бросила. Потому что разбиралась с советами GPT. Напомню: мне можно писать в домашний ящик natalimak1@yandex.ru |
![]() ![]() Send message Joined: 6 Apr 17 Posts: 16405 Credit: 0 RAC: 0 |
Внесла ещё небольшие изменения в свою оптимизированную программу. Получила результат (14:36) gp > \r 15_61_0period_boinc_mod.txt 56466062592182336298659: [0,18,24,48,54,60,84,90,108] end time = 20min, 58,148 ms. Уже не 22 минуты, а 20 минут! Отлично. Это только моя оптимизация. без оптимизации gris. Новую идею ещё не опробовала. Все ли знают девиз программиста? Нет предела оптимизации! |
©2025 (C) Progger