2014 dxdy logo

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

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




На страницу Пред.  1 ... 77, 78, 79, 80, 81  След.
 
 Re: кортежи последовательных простых. ключ к 19-252
Сообщение06.08.2025, 15:33 
Т.е. искать начиная с чистых групп всё же должно быть выгоднее ... Хорошо.

 
 
 
 Re: кортежи последовательных простых. ключ к 19-252
Сообщение06.08.2025, 16:03 
Аватара пользователя
Ну да, конечно. А насколько выгоднее? Для крайних групп в матожидание в 3.4 раза больше, для соседних групп — примерно на 12%. Вот последние данные:

Код:
15-228-2     0 — 61#

  Посчитано      Найдено        Цепочек       Соотношения
   в группе      цепочек        на юнит             между
                  тысячи                         группами
G19   100 %           98           2242            1.1138
G20   100 %         2645           2025            1.1174
G21   100 %        23366           1815            1.1190
G22   100 %        91643           1622            1
G23
G24
G25    63 %       129147           1144            1.1236
G26    92 %       111553           1016            1.1241
G27   100 %        46375            907            1.1232
G28   100 %        11231            813            1.1220
G29   100 %         1566            731            1.1206
G30   100 %           73            656            1.1198
                 _______
                 417 млн

Я же об этом уже столько толкую. Вы единственный кто понимал. Может Вы отвлеклись где-то и забыли что я говорил. И сейчас спросите меня: так здесь же в таблице все чистые цепочки (от 0/0 до 15/15), а не только 15-ки.

Да, и для каждой из них это соотношение справедливо. Для каждой. И по войдам (0/0) соседние группы тоже отличаются на 12%, и по самым популярным цепочкам 6/6, и конечно по 15/15 (центральным 15-кам).

 
 
 
 Re: кортежи последовательных простых. ключ к 19-252
Сообщение15.08.2025, 01:31 
Аватара пользователя
Спешу сообщить о великом достижении в заполнении заполненного спектра:

Ура!
Нашлось приближение с кодом 3758

165726599366491

Хотя я ещё месяц назад сообщил не только о нём, но и о других:

Yadryara в сообщении #1693562 писал(а):
Итого, вот 3 первых приближения к центральной 15-ке с кодом 3758:

Код:
1.   165726599366491
2.   186220431352279
3.   430329597194911


gris, планируете отвечать на мой вопрос по поводу "минималок Дмитрия"?

А прогнозирование количества кортежей вам интересно?

 
 
 
 Re: кортежи последовательных простых. ключ к 19-252
Сообщение15.08.2025, 09:38 
Yadryara в сообщении #1698178 писал(а):
Спешу сообщить о великом достижении в заполнении заполненного спектра:

Ура!
Нашлось приближение с кодом 3758

165726599366491

Хотя я ещё месяц назад сообщил не только о нём, но и о других:
Опять ею велосипед изобретен.
На лауреата тянет...

 
 
 
 Re: кортежи последовательных простых. ключ к 19-252
Сообщение15.08.2025, 15:55 
Аватара пользователя
Yadryara, что уж вы и летом покоя не знаете. У меня всё это из головы вылетело. Минималки какие-то. Настолки. У меня комп не может работать больше часа подряд. Попросил сыночку папе погонять прогу. Так они зетники хореглазые не понимают как это бесплатно ради мечты о совершенном кортеже длиной 25. Ну один раз куда-то отослал и погонял полчаса. И заказал три морских сета, чтобы не лез больше со своими кортежами. А я только начал собирать теллуровую коллекцию.

 
 
 
 Re: кортежи последовательных простых. ключ к 19-252
Сообщение15.08.2025, 16:04 
Аватара пользователя

(gris)

gris в сообщении #1698266 писал(а):
что уж вы и летом покоя не знаете.

Дык это. У меня лет сто назад конкурс был, он так и назывался "Покой нам только снится". А минималки — это ваше слово. Вот я и спрашиваю, какие они, симпатичные хоть. Тут у нас один поэт покрышки предлагал заштопать, так я не очень доверяю.

Вообще у нас тут в лесу кладбище новое построили, так что я в случае чего доползу.

 
 
 
 покаж нам толька синус
Сообщение24.08.2025, 15:52 
Аватара пользователя
Вот программа подана ИИ на анализ.

Код:
{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;

for(i43=1,28,
for(i47=1,32,
for(i53=1,38,
for(i59=1,44,
for(i61=1,46,

bpt=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++;

        \\кортеж 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
       
);););););
print("sgenerirovano dobavok ",k);

w1=strprintf("end ");
print(w1);
filewrite(fout,w1);
fileclose(fout)

}

ИИ сказал:
Я посмотрел на вашу программу на PARI/GP (файл 15_61_0period_boinc.txt ). Она
довольно тяжёлая: вложенные циклы по ~28×32×38×44×46 ≈ 67 миллионов
итераций, и внутри каждой проверяются условия на простоту, формируются кортежи
и сравниваются с шаблонами.
Вот что можно реально ускорить/оптимизировать:
1 Работа с китайской системой сравнений
Сейчас каждый раз считается
gp
Copy code
bpt = lift(chinese([...]));
Это дорогая операция.
Можно вынести все константные модули ( 2,3,5,7,11,13,17,19,... ) в один общий
модуль
gp
Copy code
M = lcm([2,3,5,7,11,13,17,19,23,29,31,37,41,43,47,53,59,61]);
и заранее посчитать обратные элементы для каждого модуля (CRT через Garner или
precomputed inverses). Тогда вместо chinese вы делаете быстрый ручной CRT на
базе предвычислений.
2 Использование primepi вместо forprime
Сейчас у вас:
forprime(p=bpt+pt[4], bpt+pt[1S2k]i,p tlo+ c+o;n tvemnyt[l]=p; );
Но forprime — это перебор всех простых в интервале. Если интервал узкий и
нужно только число простых и их позиции, лучше:
Сначала проверить, что количество простых равно нужному
( primepi(bpt+pt[12]) - primepi(bpt+pt[4]-1) == 9 ),
И только если совпало — тогда уже реально получать список простых через
vecPrimes(bpt+pt[4], bpt+pt[12]) .
Это уберёт 99% ненужных проходов.
3 Избавиться от повторных ispseudoprime
Много проверок вида:
gp
if(ispseudoprime(bpt+pt[4]) && ispseudoprime(bpt+pt[12]), ...)
После этого снова запускается forprime , который всё равно проверяет простоту.
Оптимизация:
Сначала считать vpr = vecPrimes(start,end) ,
Потом уже проверять границы и нужные позиции.
4 Векторы шаблонов ( pt9 , pt11 , …)
Сейчас для каждого кандидата вы делаете:
gp
for(m=2,9, pat9[m]=vmy[m]-vmy[1]);
if(pat9==pt9, ...)
Это можно свернуть в одну проверку через vector_equal или напрямую через
сравнение разностей (чтобы избежать выделения новых массивов каждый раз).
Например:
Copy code
gp
Skip to content
ok = 1;
for(m=2,9, if(vmy[m]-vmy[1] != pt9[m], ok=0; break));
if(ok, ...)
Это уменьшит расход памяти и GC.
5 Вынести файлы из цикла
filewrite на каждой итерации — очень медленно. Лучше собирать результаты в
строковый буфер (например, вектор строк), и писать в файл блоками (раз в 1000
записей или в конце цикла).
6 Параллелизация
PARI/GP умеет параллельные циклы через parfor . У вас есть 5 внешних циклов
( i43,i47,i53,i59,i61 ).
Можно заменить на что-то вроде:
gp
Copy code
parfor(i43=1,28,
/* внутри вложенные циклы */
)
или ещё лучше — распараллелить по самому крупному измерению ( i61 ).
7 Микрооптимизации
ispseudoprime можно заменить на isprime — он тоже использует
детерминированный тест, но может быть чуть быстрее для чисел в вашем
диапазоне.
vecsum(pat1) можно заменить на sum(i=1,#pat1, pat1[i]) . Иногда быстрее,
так как не создаёт новый объект.
fromdigits(pat1[2..14],2) — лучше вручную посчитать сдвигами.
В целом: самый большой выигрыш даст (1) предвычисленный CRT вместо
вызова chinese , (2) использование primepi для отсечения неверных кандидатов
до вызова forprime , и (3) параллелизация внешних циклов. Это может ускорить
программу в десятки раз.
Хотите, я могу переписать ваш кусок с проверкой кортежей (например, для 9 и 11) в
оптимизированном стиле, чтобы вы сразу видели прирост?

Буду признателен за высказывание мнений и советов.

 
 
 
 Re: кортежи последовательных простых. ключ к 19-252
Сообщение24.08.2025, 16:13 
Аватара пользователя
Ну так чтобы мнение высказывать, надо хотя бы понимать что с помощью этой проги делать собираетесь. Симпатичные минималки искать :-) Или, наоборот, отвратные :cry:

Ну можно конечно поразбираться что у Вас там в коде. Вверху вроде как раз паттерн 15-228-2.

 
 
 
 Re: кортежи последовательных простых. ключ к 19-252
Сообщение24.08.2025, 16:17 
gris в сообщении #1699535 писал(а):
2 Использование primepi вместо forprime
Это вредный совет: для больших чисел (более 1e12) primepi() намного медленнее forprime().
gris в сообщении #1699535 писал(а):
5 Вынести файлы из цикла
Это просто ошибка ИИ, filewrite() выполняются достаточно редко (только для найденных цепочек) и на скорость не влияют. Если конечно найденных цепочек не сотни тысяч каждый час. Буферизация наоборот повышает риски потери результатов из-за любого сбоя.
gris в сообщении #1699535 писал(а):
PARI/GP умеет параллельные циклы через parfor
Умеет. Но плохо (не ровно кратно количеству ядер/потоков). Потому ручное деление немного выгоднее (пока памяти хватает на все отдельные итерации).
gris в сообщении #1699535 писал(а):
ispseudoprime можно заменить на isprime — он тоже использует детерминированный тест, но может быть чуть быстрее для чисел в вашем диапазоне.
Это просто чушь: ispseudoprime() как раз недермиинирована и потому существенно быстрее (уж точно для чисел больше 2e19). Проверяется прямым тестом.
gris в сообщении #1699535 писал(а):
fromdigits(pat1[2..14],2) — лучше вручную посчитать сдвигами
Очень спорно и надо проверять: обычно встроенные функции заметно быстрее любой их реализации вручную. Интерпретатор же!
Впрочем в силу п.5 на скорость это тоже не влияет.

Собственно бесспорно лишь 1.
И один алгоритмический метод ускорения в разы (предпроверка остатков по большим модулям) не приведён вообще. А он занимает всего одну строчку кода и работает быстрее ispseudoprime().

Итог: любые советы ИИ надо обязательно перепроверять! В том числе и на правильность вычислений, галлюцинации ИИ никто не отменял.

PS. Сам код не смотрел, наверняка там и ещё чего можно улучшить.

-- 24.08.2025, 16:21 --

А, ну да, делать forprime() для каждой длины центрального паттерна - глупость, надо сделать для обрамляющего и потом пользоваться. Copy/Paste без понимания делаемого до добра не доводит.

 
 
 
 Re: кортежи последовательных простых. ключ к 19-252
Сообщение24.08.2025, 16:36 
Аватара пользователя
Dmitriy40, а Вы поняли что это за программа? Это же программа, которой в Боинке o25 в 4-м Приложении нынче считают.

Вот характерное число:
gris в сообщении #1699535 писал(а):
if(bpt>=2079914861571286679


И вот инфа.
gris в сообщении #1699535 писал(а):
ИИ сказал:
Я посмотрел на вашу программу на PARI/GP (файл 15_61_0period_boinc.txt ).

Да и по смыслу видно. Кстати, можем скорость счёта теперь сравнить.

gris, а вы не в курсе, что нельзя быть её рупором? Нам это чётко объяснили.

И что мы здесь сейчас будем по-новой объяснять как ускорить эту программу??

 
 
 
 Re: кортежи последовательных простых. ключ к 19-252
Сообщение24.08.2025, 16:52 
Аватара пользователя
Dmitriy40, у меня небольшое непонимание.
В программе в цикле вычисляются по-китайски все кандидаты на первый элемент кортежа. А затем кортеж проверяется. Даже если проверка проходит хорошо, всё равно основное время работы уходит на неё. Применение chinese занимает от силы 5%. Есть ли смысл делать это врукопашную с предвычислениями? Или же сосредоточиться на оптимизации проверки кортежа, тогда и оптимизация китайской части сыграет.
Yadryara, я знаю. Вы можете внести какие-то конструктивные предложения. Это будет моим наказанием.

 
 
 
 Re: кортежи последовательных простых. ключ к 19-252
Сообщение24.08.2025, 17:09 
Аватара пользователя
gris в сообщении #1699539 писал(а):
Вы можете внести какие-то конструктивные предложения.

Ну так я внёс. И довольно давно: Разбиение на группы по чистоте. И недавно здесь же чуть выше напомнил об этом. Почему вы промолчали?

Что означает слово "ключ" в названии нынешней темы?

 
 
 
 Re: кортежи последовательных простых. ключ к 19-252
Сообщение24.08.2025, 18:41 
Yadryara
Догадался. Но не особо интересно.

gris
Разумеется 5% оптимизировать рано, сначала лучше оптимизировать то что занимает 95%.
Но если оптимизировать первое во много раз легче, то можно начать и с него. Тут уж каждый сам решает что ему интереснее и важнее.

С другой стороны, откуда Вы взяли цифру 5%, её реально измеряли или это просто прикидка на глазок?

gris
Честно говоря нет никакого интереса улучшать этот код. Об этом говорилось уже раз 5, в разных темах, НМ их читать не хочет, разбираться тоже не хочет - ну и зачем тогда это нам?
Я так вообще не понимаю какую задачу решает запуск этого приложения. Вот не понимаю. Заполнение спектра (и спектра спектров) - не задача, гипотеза Диксона гарантирует и то и другое. Пока Вы заполняли спектр минимальными значениями - был хоть какой-то смысл (чисто спортивный, но хоть такой), тут же ... Получается работа ради работы, без всякого полезного выхлопа от неё. Уже неоднократно про это говорил, воз не то что и ныне там, а к нему ещё цепляют дополнительные подводы ...

-- 24.08.2025, 19:12 --

gris в сообщении #1699539 писал(а):
Даже если проверка проходит хорошо, всё равно основное время работы уходит на неё.
Важно время проверки не когда "хорошо", а когда "плохо" - чтобы как можно быстрее отбросить точно неподходящие bpt (ведь их гораздо больше подходящих) и пойти дальше.

Кстати, посмотрев внимательнее на код, обнаружил что он в принципе не может найти кортежи длиной 15, в которых 2,3,4,12,13,14 числа кортежа составные (эти биты в коде будут нулевыми). Забавно.

-- 24.08.2025, 19:21 --

На самом деле почти весь анализ ИИ можно выкинуть: большинство операций находятся глубоко за ispseudoprime и выполняются очень редко, потому на скорость не влияют.
Важна лишь скорость chinese и одной-двух ispseudoprime, остальное влияет мало.

 
 
 
 Re: кортежи последовательных простых. ключ к 19-252
Сообщение24.08.2025, 20:40 
Аватара пользователя
Dmitriy40 в сообщении #1699537 писал(а):
Умеет. Но плохо (не ровно кратно количеству ядер/потоков). Потому ручное деление немного выгоднее (пока памяти хватает на все отдельные итерации).

Не знаю, насколько это применимо к данному коду, но параллелизация в PARI/GP очень эффективная вещь. Есть некоторые тонкости с распеделением нагрузки по тредам (parfor пытается это автоматизировать, но не всегда удачно), но всё решаемо и поддается настройке.

 
 
 
 Re: кортежи последовательных простых. ключ к 19-252
Сообщение24.08.2025, 20:51 
maxal в сообщении #1699559 писал(а):
параллелизация в PARI/GP очень эффективная вещь.
Не согласен, мои тесты показывают ускорение всего в 3 раза вместо 4 на 4 ядрах, при этом они все 4 загружены на 100%, кажется я приводил пример в теме про PARI/GP.
Возможно на каком-то более сложном коде эффект будет лучше.

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


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