2014 dxdy logo

Научный форум dxdy

Математика, Физика, Computer Science, Machine Learning, LaTeX, Механика и Техника, Химия,
Биология и Медицина, Экономика и Финансовая Математика, Гуманитарные науки




На страницу Пред.  1 ... 78, 79, 80, 81, 82  След.
 
 Re: кортежи последовательных простых. ключ к 19-252
Сообщение26.08.2025, 02:05 
Аватара пользователя
По поводу помощи задал вопрос здесь.

gris, по поводу ключа вопрос не риторический. Ведь я как раз предлагаю один из таких ключей. Причём это не программерский трюк, а математико-комбинаторный. Вам это не интересно?

 
 
 
 Re: кортежи последовательных простых. ключ к 19-252
Сообщение26.08.2025, 07:55 
Аватара пользователя
Ну а пока суть да дело, поразбирался с этой программой. Благо, у меня комп вчера освободился.

7 разрешённых остатков задал явно:

Код:
rost17=12; rost19=4; rost23=4; rost29=18; rost31=3; rost37=1; rost41=1;

Кроме того, слегка изменил вывод и сделал засечку времени. Запустил из консоли:

Код:
gp.exe Rab-15-mak.gp
                                          GP/PARI CALCULATOR Version 2.17.0 (released)
                                  amd64 running mingw (x86-64/GMP-6.1.2 kernel) 64-bit version
                                       compiled: Sep 28 2024, gcc version 12-posix (GCC)
                                                    threading engine: single
                                         (readline v8.0 enabled, extended help enabled)

                                             Copyright (C) 2000-2024 The PARI Group

PARI/GP is free software, covered by the GNU General Public License, and comes WITHOUT ANY WARRANTY WHATSOEVER.

Type ? for help, \q to quit.
Type ?18 for how to get moral (and possibly technical) support.

parisize = 8000000, primelimit = 1048576, factorlimit = 1048576

74153990393699851280099: [0,18,24,48,54,60,84,90,108]

kkan: 68913152
end

13min, 47,374 ms


Goodbye!

Как видим, найдена очаровательная центральная девяточка :-)

Также видим враньё ИИ:

gris в сообщении #1699535 писал(а):
Она довольно тяжёлая: вложенные циклы по ~28×32×38×44×46 ≈ 67 миллионов итераций,

Не 67, а 69 лямов.

Эта прога посчитала юнит за $13\cdot60+47=827$ секунд.

А программа Дмитрия у меня считала один юнит вместе с дополнительной статистикой 41-42 секунды. Традиционно посчитаю не в свою пользу — возьму 43 секунды. Работали 12 потоков. А за какое время справился бы один поток? Не знаю, но опять посчитаю не в свою пользу — просто умножу на 12. $43\cdot12=516$ секунд.

Юниты у нас конечно разные, в нашем юните проверяется в 1760 раз больше кандидатов. Таким образом, соотношение скоростей:
$$\frac{827\cdot1760}{516}\approx2821$$

То бишь программа Дмитрия быстрее представленной по меньшей мере в 2800 раз.

 
 
 
 Re: кортежи последовательных простых. ключ к 19-252
Сообщение26.08.2025, 10:06 
Аватара пользователя
Yadryara меня привлекло время 13. секунд, минут. Запустил свою давнишнюю прогу
Код:
(09:27) gp > \r C:/GRIS/9-108/search_by_pattern_9.gp
369733791264 number from
369733791264 number to
search in 74153990393530952224320 (7.4 E22) - 74153990393731512714450 (7.4 E22) L=2.01 E11
31539200 formulae to generate
74153990393699851280099: [0, 18, 24, 48, 54, 60, 84, 90, 108]
time = 13min, 55,620 ms.
(09:44) gp >

Тоже с предустановлением. Не знаю, откуда взялся номер периода, но на нём было найдено именно ваше девяточко и именно за 13 мин. Совпадение! Но тут проверился весь 31 млн формул. Я рад, что немножко оживил тему и авторитетные гуру даже немного обсудили сопутствующие вопросы.
Но товарищ Yadryara, произошла ужасная ошибка! Я нашёл другой ключ и запер для себя дверь в запретную комнату. Иногда залезаю туда через форточку. Пролезаю пока:)
Оказалось, что для кортежей я не гожусь :oops: :cry:

 
 
 
 Re: кортежи последовательных простых. ключ к 19-252
Сообщение26.08.2025, 10:57 
Аватара пользователя
gris, говорил же для оптимизации проги не так уж нужен мощный комп. 13 минут это же не 13 лет. Вполне можно экспериментировать: изменять прогу, перезапускать и смотреть на время.

А теперича попробуйте ускорить вашу прогу, проанализировав советы.

Я вот добавил в программу две строчки и ускорил работу более чем вдвое:

Код:
kkan: 68913152
end

5min, 45,377 ms

Правда, хотя кандидатов проверено столько же, та 9-ка уже не нашлась. Но ведь главная цель-то найти 15-ку, а не 9-ку, не правда ли?

 
 
 
 Re: кортежи последовательных простых. ключ к 19-252
Сообщение26.08.2025, 14:03 
Аватара пользователя
gris, ещё один приём применил — время счёта сократилось до 2min, 54,919 ms.

И ещё есть идея в резерве. Я вам расскажу и покажу, только если вы публично пообещаете никому не говорить :-)

 
 
 
 Re: кортежи последовательных простых. ключ к 19-252
Сообщение26.08.2025, 17:24 
Аватара пользователя
gris в сообщении #1699684 писал(а):
Но товарищ Yadryara, произошла ужасная ошибка!

Тупею. Далеко не сразу сообразил: это видимо намёк на фразу "товарищ Сталин, произошла ужасная ошибка".

Yadryara в сообщении #1699707 писал(а):
И ещё есть идея в резерве.

Не прокатила.

А что 9-ка обязательно должна сохраниться? Ну тогда первую идею можно не использовать, а использовать только вторую, тогда 9-ка снова найдётся.

Но зачем нужна именно эта 9-ка-то? Можно обе идеи использовать, просто 9-к будет находиться гораздо меньше (как и 11-к, и 13-к), но находиться они будут. 15-ки пропускаться не будут. И это, кстати, подсказка, в чём заключается первая применённая идея ускорения.

То, что у Дмитрия программа на Асме, говорено миллиард раз. Могу ещё раз повторить, мне не трудно. И о том почему программа 1-го приложения проигрывала программе Дмитрия по скорости свыше 700 тысяч раз, тоже многократно говорено. Я вижу две основных причины.

(gris)

Вы какое-то злопыхательство с моей стороны видите? Вроде я доброжелателен как обычно. Хотя и не абсолютно ко всем, да. Но на гадости тем же не отвечаю.

 
 
 
 Re: кортежи последовательных простых. ключ к 19-252
Сообщение26.08.2025, 18:09 
Аватара пользователя
 i  Обсуждение параллелизации в PARI/GP отсоединено в отдельную тему.

 
 
 
 Re: кортежи последовательных простых. ключ к 19-252
Сообщение26.08.2025, 18:32 
Yadryara в сообщении #1699687 писал(а):
та 9-ка уже не нашлась.
Чтобы не терять 9-ки, надо запрещённые (или разрешённые, без разницы) остатки считать тоже для паттерна длиной 9, не 15. Ускорение будет поменьше, зато никаких потерь.

-- 26.08.2025, 18:41 --

(Оффтоп)

Отдельно непонятно почему собираются 9-ки, но не собираются 7-ки, 5-ки и 3-ки, их ведь ещё больше и находить проще и быстрее. А совсем максималисты могут собирать и 1-ки (т.е. просто простые числа), их совсем много.
Чем же 9-ки так выделены среди других что они непременно нужны в полном количестве, а? Кто может на это дать вменяемый ответ?

 
 
 
 Re: кортежи последовательных простых. ключ к 19-252
Сообщение26.08.2025, 18:52 
Аватара пользователя
я список кортежей прочтя до половины
вдруг очутился в сумрачном лесу
и радостно вступая в путь походкой Юла
высокомерно щурюсь на десу
Yadryara, я уставя печальные очи свои на свалившееся на меня проблемы в конце лета, готов забить теллурку в свою голову, чтобы понять, что мне делать? Мой удел — интереснейшие задачи Каппа-Тау-Йота, да и то не все.
Что я ни делаю, я всё делаю не так. Я устал, но не ухожу. Вы уж между собой порешайте кранчерные проблемы. Я в криминал не умею.

 
 
 
 Re: кортежи последовательных простых. ключ к 19-252
Сообщение26.08.2025, 19:08 
Аватара пользователя
Dmitriy40 в сообщении #1699737 писал(а):
Чтобы не терять 9-ки, надо запрещённые (или разрешённые, без разницы) остатки считать тоже для паттерна длиной 9, не 15. Ускорение будет поменьше, зато никаких потерь.

А то я не понимаю.

Кто-то может и не понимает, да. Тогда и я проговорю вроде очевидное. Если хочешь иметь конкурентные программы, то приходится хотя бы отчасти отказываться от PARI, потому что он интерпретатор и, скорее всего, будет много проигрывать тому же Асму.

gris
, предлагаю оффтоп не развивать. А кокетничать и я умею :-)

 
 
 
 Re: кортежи последовательных простых. ключ к 19-252
Сообщение26.08.2025, 20:08 
Yadryara в сообщении #1699744 писал(а):
Если хочешь иметь конкурентные программы, то приходится хотя бы отчасти отказываться от PARI...
Недавно, а именно 25.04.2025, мной было написано "Но самое прикольное в ускорении другое..." и далее по тексту читать до конца.
Линк на тот пост https://dxdy.ru/post1683691.html#p1683691

 
 
 
 Re: кортежи последовательных простых. ключ к 19-252
Сообщение26.08.2025, 20:52 
Решил проверить значимость совета 1 от ИИ - замена КТО в каждой итерации на предвычисление.

Вынос вычисления chinese основной массы остатков из внутреннего цикла на уровень выше (и все константные остатки совсем за все циклы) и оставив во внутреннем цикле лишь одно lift(chinese(y,Mod())), получил ускорение одной (а все 28 ждать влом) итерации самого внешнего цикла с 50с до 39с.

А вот замена во внутреннем цикле lift(chinese(y,Mod()))) на ручное вычисление x+A[]-B+if(A[]<B,61#) с предвычисленными значениями A[],B ускоряет всего лишь до 38с. Т.е. chinese от двух аргументов на таких числах достаточно быстра и заменять её на ручное вычисления смысла не имеет, хотя сложность вычислений существенно разная.

Понятно что в обоих случаях по прежнему перебираются все варианты и никаких пропусков быть не может (и та 9-ка обнаруживается).

Так что 1 совет ИИ хорош наполовину: константные выражения нужно выносить из циклов (это вообще общеизвестная практика оптимизации любых программ), а вот заменять встроенные функции на прямое вычисление в данном случае смысла нет.

Ну и самые эффективные методы ускорения ИИ так и не предложил.

 
 
 
 Re: кортежи последовательных простых. ключ к 19-252
Сообщение27.08.2025, 00:54 
Аватара пользователя
DemISdx в сообщении #1699756 писал(а):
и далее по тексту читать до конца.

Прочитал. Ну вот не зря я не раз просил важное не постить добавкой к посту. Вы оказывается, ещё тогда, в апреле, помощь со счётом предлагали...

Dmitriy40 в сообщении #1699760 писал(а):
(это вообще общеизвестная практика оптимизации любых программ)

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

Dmitriy40 в сообщении #1699760 писал(а):
на ручное вычисление

И опять небось будет недоумение, а что же за ручное вычисление такое. А ведь в теме было подробное объяснение...

 
 
 
 Re: кортежи последовательных простых. ключ к 19-252
Сообщение27.08.2025, 08:41 
Yadryara в сообщении #1699768 писал(а):
DemISdx в сообщении #1699756 писал(а):
и далее по тексту читать до конца.

Прочитал. Ну вот не зря я не раз просил важное не постить добавкой к посту. Вы оказывается, ещё тогда, в апреле, помощь со счётом предлагали...
Убрано под кат было по причине не соответствия теме.

(Оффтоп)

Но интересно, что по факту, написанное там, полностью предсказало завал последнего, 4-го приложения, на стадии его запуска.
Когда сервер не справился с тем, чего от него хотели и просто снизили число генерируемых задач.
Конгениально!
Ну это как ездить в булочную на Кразе, когда она находится через дорогу...

 
 
 
 Re: кортежи последовательных простых. ключ к 19-252
Сообщение27.08.2025, 17:20 
Аватара пользователя
Ну ладно. Все эти предвычисления были два года назад. Я даже заглянул в пентадекатлон на 202 стр. Помню, что и сам воодушевлённо мастерил что-то, но безускоренно.
Сейчас просто обратился к ИИ Алику, братику Алисы, и он подсказал мне скрипт.
Нахождение девяточки по-китайски. Выводятся 12 кандидатов на первый элемент.
Код:
{
pt= [0,4,10,12,18,22,24,28,30];
pl=#pt;
w=19;
nw=primepi(w);
prs=primes(nw);
period=vecprod(prs);
print(period," period");
lpr=1;
wd=vector(nw);
for( ip=1,nw,
  rip=[];
  for( r=1,prs[ip]-1,
    for( i=1,pl, if( (r+pt[i])%prs[ip]==0,  next(2)));
  rip =concat(rip,r)  );
  lpr=lpr*#rip;
  wd[ip]=rip;
); \\for ip
printf("prove by %d#: %d formulae \n",prs[nw], lpr);
k=0;
forvec(v=vector(#wd,i,[1,#wd[i]]), k++; if(k>12, break);
  form=lift(chinese(  vector( #wd,j,Mod( wd[j][v[j]], prs[j]) )  ));
  print(form);
);\\ forvec
}
9699690 period
prove by 19#: 1200 formulae
3125179
2614669
2104159
1593649
1083139
8230279
7719769
7209259
5167219
4656709
2554609
2044099

Вот предвычисление необходимых векторов для 19# самым примитивным перебором.
Обращение элементов.
Код:
{N=11;
vp=primes(N); print(vp);
np=#vp;
prm=vecprod(vp); print(prm);
m=vector(np,i,prm\vp[i]);print(m);
mm=vector(np);
for(i=1,np,
  forstep(ip=1,m[i]-1,1,
    if( (ip*vp[i])%m[i]==1, mm[i]=ip);
  );
); print(mm);
}

[2, 3, 5, 7, 11, 13, 17, 19]
9699690
[4849845, 3233230, 1939938, 1385670, 881790, 746130, 570570, 510510]
[2424923, 2155487, 1163963, 197953, 320651, 459157, 33563, 26869]

Вот нахождение первых элементов с предвычислением.
Код:
{
pt= [0,4,10,12,18,22,24,28,30];
pl=#pt;
w=19;
nw=primepi(w);
prs=primes(nw);
period=vecprod(prs);
print(period," period");

lpr=1;
wd=vector(nw);

for( ip=1,nw,
  rip=[];
  for( r=1,prs[ip]-1, 
    for( i=1,pl, if( (r+pt[i])%prs[ip]==0,  next(2)));
  rip =concat(rip,r)  );
  lpr=lpr*#rip;
  wd[ip]=rip;
); \\for ip
printf("prove by %d#: %d formulae \n",prs[nw], lpr);
print(wd);

a=[4849845, 3233230, 1939938, 1385670, 881790, 746130, 570570, 510510];
b=[2424923, 2155487, 1163963, 197953, 320651, 459157, 33563, 26869];

k=0;
forvec(v=vector(#wd,i,[1,#wd[i]]), k++; if(k>12, break);
  form=(vecsum(  vector( #wd,j,a[j]*b[j]*wd[j][v[j]]) ) )%period;
  print(form);
);\\ forvec
}
9699690 period
prove by 19#: 1200 formulae
[[1], [1], [4], [1], [2, 6, 8], [5, 6, 7,...
3125179
2614669
2104159
1593649
1083139
8230279
7719769
7209259
5167219
4656709
2554609
2044099

Всё совпадает, а теперь надо всех кандидатов проверять. Извините, не откомментировал
Я верю, что где-то в запасниках PARI лежат эти предвычисленные массивы, а то самомы их предвычислять тоскливо. И мне кажется, что PARI их сама использует. Так же, как и первые полторы тысячи простых.

 
 
 [ Сообщений: 1230 ]  На страницу Пред.  1 ... 78, 79, 80, 81, 82  След.


Powered by phpBB © 2000, 2002, 2005, 2007 phpBB Group