2014 dxdy logo

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

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




Начать новую тему Ответить на тему На страницу Пред.  1 ... 82, 83, 84, 85, 86
 
 Re: Симметричные кортежи из последовательных простых чисел
Сообщение02.05.2025, 14:59 
Заслуженный участник


20/08/14
12153
Россия, Москва
За три дня наконец написал на асме x64 подсчёт констант HL1 (в один поток). Сравнение скорости с PARI: для 19-252 подсчёт шести констант (C0-C6, шестикратное загрязнение) занимает 374с, на асме 7с. C11 на PARI считались 11ч52м (вдвое оптимизировано), на асме за 28м, C12 на PARI считались 22ч38м (вдвое оптимизировано), на асме хватило 52м. C15 посчитались за 2.9ч.
А все 30 - за 4.9ч:
vC=[1592669394.7454967048413543203360474784, 224048612037.93039519376335978164281999, 15060404457776.501117870903945957690526, 643975079051969.03088164442593218519955, 19672864014876028.811392004831387751738, 457178627398399663.18641317636046162635, 8402763498659303975.5096285952058360662, 125377224477963805206.89777938556921101, 1546929025718798946089.7912641404857550, 15994906029871361204769.187564407532779, 139968081763087863869464.29066290148284, 1044156353257761368147093.1368606066768, 6675438285921407673520498.0916226089839, 36708432877688236096050822.004415616758, 174035122935989493790024654.03258975691, 712196947564732599952975315.78320487298, 2515955263037428615471767242.6561789800, 7665777149089072567977478763.2382586304, 20106445874574298344616432170.789792210, 45264384755093882439279790845.152290852, 87100700457132907803880854701.370644633, 142466968404912726214137650877.36926652, 196618531164038126660089156973.85750819, 226702801658738154151893801565.04524662, 215451193980762378792182794368.57516197, 165604812316252926590574664686.92377585, 100155274592395251942807287899.23908798, 45706363430133812262358484887.605564941, 14703144047237460493314662394.499537327, 2942032946247678005083329346.8122466890, 271007079912233354594900744.95914433491]
К сожалению обеспечить точность как в PARI не удалось, в C0-C13 верные лишь 19-14 цифр, в следующих наверное и чуть меньше, 11-13, точно не знаю (самые неточные - где больше вариантов грязных паттернов, к концу точность улучшается). Фактически точность принесена в жертву скорости.

Один день из трёх заняли доработки для подсчёта любых паттернов, не только заданного при компиляции. Теперь можно считать любые паттерны (только с чётными числами) длиной до 1000 и диаметром до 2000 с загрязнением до 99 (некритично, просто памяти жалко). Используется из PARI так:
Код:
v=[0,6,12,30,42,72,90,96,120,126,132,156,162,180,210,222,240,246,252];
maxn=99;
BC=vector(#v+maxn,k, if(k<#v, 0, prodeulerrat((p^k-k*p^(k-1))/(p-1)^k, 1, nextprime(k+1))) );
vMC=vector(#v+maxn,k, if(k<#v, 0, x=1.0;forprime(p=3,k,x/=p*(1-1.0/p)^k);forprime(p=k+1,v[#v]/2,x/=p-k);x) );
CC=vector(#v+maxn,k, 2^(k-1) * vMC[k] * BC[k]);
vC=extern(strexpand("hl1-vc.exe ",maxn,"  ",strjoin(v," "))); if(type(vC)!="t_VEC", print(vC); quit);\\Печать сообщения если ошибка
for(i=1,#vC, vC[i]*=CC[i+#v-1]);
print("vC=",vC);
Файл hl1-vc.exe берём из облака https://cloud.mail.ru/public/YDsR/3Lz7dmoT8 и кладём в текущую папку (или по path или в вызове явно указать путь к файлу).
Запускать можно и сам hl1-vc.exe, первым параметром указывается максимальное загрязнение (maxn), потом список через пробел чисел паттерна (если он будет не с 0 - беда!). Сортировка паттерна не требуется (даже дубли чисел допустимы), надо только чтобы 0 был строго первым. Если паттерн не указать, то используется встроенный 19-252. Если не указать и максимальное загрязнение, используется 0 (считается только основная C=С0).
Если указать слишком большие параметры - выйдет по ошибке и PARI её должен показать (if после вызова). Если указать что-то некорректно (не числа), то должно так же выйти по какой-то произвольной ошибке.
При работе ничего не отображается, только результат по окончании. Это минус, да. Для себя сделал версию с показом прогресса, но смысла мало, только что не подвисла совсем уж - зависимость времени итераций квадратична начиная с максимальной, потому последние 2/3 прогресса просчитываются практически моментально.
Фактически hl1-vc.exe считает для каждого загрязнения (включая и 0) сумму для всех возможных паттернов с таким загрязнением произведений количеств разрешённых остатков по простым до половины диаметра. Можно использовать и без PARI. Причём сделал ровно по своему PARI коду с битовыми масками и без оптимизации для симметричных паттернов, так что должно работать для любых (пока не проверил).
Пример вызова (для контроля):
Код:
C:\>hl1-vc.exe 99  0 18 24 48 60 78 84 90 108 120 144 150 168
[1743766987126899474e8, 2067197456861231798e9, 1154517952459778347e10, 4039425511898329840e10, 9223372036854775808e10, 1824534773030861902e11, 2599587815335058475e11, 2943175667936234025e11, 2691163466782095891e11, 2008928125102935912e11, 1232600332341856612e11, 6237667076157326906e10, 2604960512102486348e10, 8956581484542860411e9, 2521515108599682774e9, 5758838545480484912e8, 1051938614208073028e8, 1504546028164578485e7, 1631770029496499824e6, 1276139265473698171e5, 6609166036542326989e3, 1921130264456253527e2, 2036195042918400000e0]
Отрабатывает за 20с.
Yadryara, пользуйтесь, теперь статистикой завалитесь. ;-)

 Профиль  
                  
 
 Re: Симметричные кортежи из последовательных простых чисел
Сообщение02.05.2025, 15:27 
Аватара пользователя


29/04/13
9003
Богородский
Здорово! Правда, антивир скачанный файл в очередной раз удалил. Буду вспоминать как это обойти.

Dmitriy40 в сообщении #1684733 писал(а):
Для себя сделал версию с показом прогресса, но смысла мало,

Ну как мало. Я без прогресса никуда. Сможете примерно оценить сколько займёт обсчёт 21-420-10:

v = [0, 6, 24, 36, 60, 66, 84, 126, 150, 204, 210, 216, 270, 294, 336, 354, 360, 384, 396, 414, 420]; ?

 Профиль  
                  
 
 Re: Симметричные кортежи из последовательных простых чисел
Сообщение02.05.2025, 16:02 
Заслуженный участник


20/08/14
12153
Россия, Москва
Yadryara в сообщении #1684738 писал(а):
Правда, антивир скачанный файл в очередной раз удалил.
Размер файла 72192 байта, контрольная сумма SHA256: 9E05425DF421F297088763BCDE525CFEF6863C23FA0CBF14F03AF5CF0FDB3E87, MD5: 67C70604C95B80495642C6FEAE060D6D

Yadryara в сообщении #1684738 писал(а):
Сможете примерно оценить сколько займёт обсчёт 21-420-10:
v = [0, 6, 24, 36, 60, 66, 84, 126, 150, 204, 210, 216, 270, 294, 336, 354, 360, 384, 396, 414, 420]; ?
Сложно, замедление почти и не начиналось ещё, вот времена для maxn=3..6: 0.24c, 3.6с, 50с, 555с. Т.е. на два порядка дольше 19-252, а значит и в сутки видимо не уложится.

 Профиль  
                  
 
 Re: Симметричные кортежи из последовательных простых чисел
Сообщение02.05.2025, 16:13 
Аватара пользователя


29/04/13
9003
Богородский
Dmitriy40 в сообщении #1684733 писал(а):
Пример вызова (для контроля):

А что это за числа? 23 константы? Но у меня они совсем другие:

Код:
v=[0, 18, 24, 48, 60, 78, 84, 90, 108, 120, 144, 150, 168];
C0 = 375388.80145173930522260454315839964068;
C1 = 35150949.740745560330477928940944587060;
C2 = 1546831068.3397093376690512559915786621;
C3 = 42536109398.573957542931290992645223152;
...
C20 = 7573325906138881394.1600144342234192347;
C21 = 1640870337421850317.7034551853709416355;
C22 = 129181904847545464.72423068907104951717;
C23 = 0;

Для 21-420-10 первые 6:

Код:
C0 = 56385014423.044932192902037636375141924;
C1 = 15924873847672.655007056117452297155603;
C2 = 2191451020113142.9941580737259327320814;
C3 = 196208423425711162.19243676506528425213;
C4 = 12836633940905844241.159241667334695796;
C5 = 654264810131026556674.53758318782761700;

 Профиль  
                  
 
 Re: Симметричные кортежи из последовательных простых чисел
Сообщение02.05.2025, 16:23 
Заслуженный участник


20/08/14
12153
Россия, Москва
Yadryara в сообщении #1684746 писал(а):
А что это за числа?
Dmitriy40 в сообщении #1684733 писал(а):
Фактически hl1-vc.exe считает для каждого загрязнения (включая и 0) сумму для всех возможных паттернов с таким загрязнением произведений количеств разрешённых остатков по простым до половины диаметра. Можно использовать и без PARI.
Домножьте на CC[] и получите константы HL1.

Yadryara в сообщении #1684746 писал(а):
Для 21-420-10 первые 6:
Код:
C:\>wt hl1-vc.exe 5  0 6 24 36 60 66 84 126 150 204 210 216 270 294 336 354 360 384 396 414 420
[1155057268015812326e54, 3446204543774972785e55, 5018328415547745507e56, 4753257263993236988e57, 3292891883750764766e58, 1778792040568395514e59]
C:\>gp64 -q hl1-vc.gp
vC=[56385014423.044932202814479474528397137, 15924873847672.655007470801862744133817, 2193326002954533.3480236983843003619073, 196325576715065597.12821074048007238364, 12842059200224220327.523731887396882323, 654458407982249078012.68152351778512543]


-- 02.05.2025, 16:26 --

Фигасе, это в C2-C5 уже всего 3 цифры верные?! :-( Не, очень подозрительно!

-- 02.05.2025, 16:33 --

Не, походу у Вас ошибка в C2-C5, у меня значения другие (старая программа на PARI):
Код:
v=[0, 6, 24, 36, 60, 66, 84, 126, 150, 204, 210, 216, 270, 294, 336, 354, 360, 384, 396, 414, 420]
vC=[56385014423.044932192902037636375141924, 15924873847672.655007056117452297155601, 2193326002954533.3505043788633540086410, 196325576715065596.69068989928512836535]
nn=[1, 190, 10536, 302614]
Time: 10,251 ms
vC=[56385014423.044932192902037636375141924, 15924873847672.655007056117452297155601, 2193326002954533.3505043788633540086410, 196325576715065596.69068989928512836535, 12842059200224219734.592335903515542641]
nn=[1, 190, 10536, 302614, 5647059]
Time: 3min, 21,974 ms

 Профиль  
                  
 
 Re: Симметричные кортежи из последовательных простых чисел
Сообщение02.05.2025, 16:45 
Аватара пользователя


29/04/13
9003
Богородский
Да, я не оттуда взял 6 констант. Это паттерн плохой, он так просто не уполовинивается. Теперь взял откуда надо и сравнил с Вашими:

Код:
C0 = 56385014423.044932 192902037636375141924;
     56385014423.044932 202814479474528397137,

C1 = 15924873847672.655007 056117452297155601;
     15924873847672.655007 470801862744133817,

C2 = 2193326002954533.3 505043788633540086410;
     2193326002954533.3 480236983843003619073,

C3 = 19632557671506559 6.69068989928512836535;
     19632557671506559 7.12821074048007238364,

C4 = 128420592002242 19734.592335903515542641;
     128420592002242 20327.523731887396882323,

C5 = 6544584079822490 03402.65530940773632777;
     6544584079822490 78012.68152351778512543

Здорово. Полный обсчёт навряд ли нужен.

 Профиль  
                  
 
 Re: Симметричные кортежи из последовательных простых чисел
Сообщение02.05.2025, 18:23 
Аватара пользователя


29/04/13
9003
Богородский
Преодолел технические проблемы. 21-420-10 у меня считался долго (почти 7 минут до С6 включительно), запустил 21-324-1 до C15 включительно (было почти 4 минуты до С7 включительно)...

Будь прогресс виден, запустил бы может и подольше, до С20. А так — очень тоскливо.

 Профиль  
                  
 
 Re: Симметричные кортежи из последовательных простых чисел
Сообщение02.05.2025, 22:46 
Заслуженный участник


20/08/14
12153
Россия, Москва
Чтобы показать прогресс надо сохранять результат счёта в файл ("1>file") и потом его читать в PARI, он не умеет игнорировать stderr (куда и выдаётся прогресс), раз попало в консоль - всё и берёт.
Ну если так хочется, вот версия с показом прогресса: https://cloud.mail.ru/public/Bqr1/1PCbuRHJ1, 72704 байта, MD5=7148A049BCBA6B2F38E2E56EFED2136A, SHA256= 60E3AAACDFAD33330EDB6E84759A9A5EA9960E5C6866F83820B3AD75B70CBCD7.
Отличия только в показе прогресса трёх верхних уровней итераций (загрязнений).
Использовать в PARI по другому, строку
vC=extern(strexpand("hl1-vc.exe ",maxn," ",strjoin(v," "))); if(type(vC)!="t_VEC", print(vC); quit);
изменить на
system(strexpand("hl1-vc-time.exe ",maxn," ",strjoin(v," ")," 1>",ff=concat(getenv("temp"),"\\hl1-vc.temp"))); vC=read(ff); print;
Ошибки обрабатывать тут не нужно, они в vC не попадут, останутся в консоли, vC будет пустым vC=[] (и цикл for(i=1,#vC,...) отработает правильно).
Предварительно посмотрите чему в PARI равно getenv("temp"), если там в конце стоит \\, то в строке вызова их указывать не нужно! Если вдруг пустая, то посмотрите "tmp" (не помню какая из них обязательна в винде, у меня на всех компах всегда обе одинаковые).
Последний print нужен чтобы видеть в консоли время работы, если его убрать, время будет затёрто следующей строкой (если та достаточно длинная). Возможность затирания специально если не хотите видеть историю времён при запуске для нескольких паттернов, но хотите видеть прогресс по мере счёта каждого паттерна (убрать и прогресс и время можно добавкой "2>nul" в строку запуска).

Для оценки можно запускать не из PARI, а просто в консоли (и параллельно другому запуску в PARI, даже для других паттернов и maxn), время счёта она сама выдаёт, так временный файл не нужен. Можно запускать хоть сотню одновременно в разных вариантах, а выходные результаты потом быстро пересчитать в нормальные константы HL1 (вместо вызова из PARI просто задать насчитанный вектор сразу в vC[] и домножить на CC[], это секунды), я так и делаю.

 Профиль  
                  
Показать сообщения за:  Поле сортировки  
Начать новую тему Ответить на тему  [ Сообщений: 1283 ]  На страницу Пред.  1 ... 82, 83, 84, 85, 86

Модераторы: Karan, Toucan, PAV, maxal, Супермодераторы



Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей


Вы не можете начинать темы
Вы не можете отвечать на сообщения
Вы не можете редактировать свои сообщения
Вы не можете удалять свои сообщения
Вы не можете добавлять вложения

Найти:
Powered by phpBB © 2000, 2002, 2005, 2007 phpBB Group