Message boards : Science : Генерация добавок в порядке возрастания
Message board moderation
| Author | Message |
|---|---|
Natalia MakarovaSend message Joined: 24 Dec 24 Posts: 2187 Credit: 16,991,036 RAC: 1,267 |
И опять - сбылась мечта идиота :) Ну, это я про себя, конечно. Очень долго не могла понять, как же генерировать эти самые добавки (которые в нулевом периоде прямо и начинают кортежи) в порядке возрастания. Теперь это уже не вопрос. С помощью gris я это осилила (он программу-то давно написал). Итак, что делаем? Первый этап: генерируем простые числа в заданном интервале натуральных чисел с помощью программы primesieve, разумеется, там, где эта программа работает. Этот этап выполняется несколько секунд, конечно, для разумных интервалов. И файл с простыми числами хорошо сохраняется и читается. Сгенерированные простые числа следуют в порядке возрастания. Второй этап. Подключаем программу gris, которая проверяет введённые простые числа на то, являются ли они добавками. Полученные простые числа, являющиеся добавками, тоже расположены в порядке возрастания. Ну вот и всё! Осталось проверить полученные добавки - стартуют ли они кортежи. При этом из нескольких миллионов простых чисел добавок получается около 2000 - всего ничего! Проверка на кортежи выполняется очень быстро. В чём же затык? В том. что один компьютер не тянет генерацию добавок, даже если их не сильно много. Сейчас экспериментирую на периоде 53# для центральных 11-к. Вот пакетный файл primesieve 2211981480498456369 2211981480998456369 --print >inp1.txt gp.exe -q number_formvar.txt Всё очень просто, всё прекрасно работает. Даже проверка простых чисел на добавки работает довольно быстро, всего 8 минут для показанного интервала на моей черепашке. Но! Посчитайте количество интервалов на весь исследуемый диапазон. НЕ ТЯНЕТ МОЙ КОМПЬЮТЕР! Очень обидно! Даже если отправить программу на удалённый сервер и там запустить несколько потоков, всё равно не потянет. Но зато теперь я вижу, наконец, эти самые добавки прямо по порядочку, а не размазанными по всему диапазону. Ну, одна мечта сбылась, сбудется и другая :) У меня их много! The TBEG BOINC project maintains the database https://boinc.tbrada.eu/spt/explore.php |
Natalia MakarovaSend message Joined: 24 Dec 24 Posts: 2187 Credit: 16,991,036 RAC: 1,267 |
Вот пример порции сгенерированных простых чисел 2211981480498456421 2211981480498456479 2211981480498456529 2211981480498456593 2211981480498456671 2211981480498456679 2211981480498456707 2211981480498456769 2211981480498456893 2211981480498456913 . . . . . . 2211981480998455939 2211981480998455961 2211981480998456131 2211981480998456177 2211981480998456311 2211981480998456357 Количество простых чисел в порции: 11833460. И из этой порции добавками являются только около 2000 простых чисел. Я в той же программе, которая проверяет простые числа на добавки, выполняю и проверку полученных добавок на кортежи, это быстро делается. The TBEG BOINC project maintains the database https://boinc.tbrada.eu/spt/explore.php |
Natalia MakarovaSend message Joined: 24 Dec 24 Posts: 2187 Credit: 16,991,036 RAC: 1,267 |
Тестирование программа проходит прекрасно! Берём известную центральную 11-ку: 2211981473498456369. Начинаем генерацию порции простых чисел с этого простого числа. Понятно, что: 1) это число попадает в порцию сгенерированных простых чисел; 2) это число проходит проверку на добавки, оно является добавкой; 3) это число проходит проверку на кортежи, оно стартует центральную 11-ку. Результат программа выдаёт. Всё замечательно! The TBEG BOINC project maintains the database https://boinc.tbrada.eu/spt/explore.php |
Natalia MakarovaSend message Joined: 24 Dec 24 Posts: 2187 Credit: 16,991,036 RAC: 1,267 |
Показываю программу, которая выполняет всю проверку: простых чисел на добавки и добавок на кортежи \\ ПРОВЕРКА СГЕНЕРИРОВАННЫХ ПРОСТЫХ ЧИСЕЛ НА ДОБАВКИ
allocatemem(2^30);
default(timer,1);
\l number_formVar_res.txt;
{pt=[0,30,48,54,78,84,90,114,120,138,168];
\\pt=[0,12,42,60,66,90,96,102,126,132,150,180,192];
\\pt=[0,18,30,60,78,84,108,114,120,144,150,168,198,210,228];
\\pt=[0,6,24,36,66,84,90,114,120,126,150,156,174,204,216,234,240];
\\pt=[0,6,12,30,42,72,90,96,120,126,132,156,162,180,210,222,240,246,252];
\\pt=[0,54,60,66,84,96,126,144,150,174,180,186,210,216,234,264,276,294,300,306,360];
\\pt=[0,6,96,102,120,132,162,180,186,210,216,222,246,252,270,300,312,330,336,426,432];
\\pt=[0,24,78,84,90,108,120,150,168,174,198,204,210,234,240,258,288,300,318,324,330,384,408];
\\pt=[0,6,12,36,90,96,102,120,132,162,180,186,210,216,222,246,252,270,300,312,330,336,342,396,420,426,432];
w=53;
dob=vector(2500);
pat1=vector(11); vmy=vector(50);
forms=readvec("inp1.txt");
\\-------------------------
pl=#pt;
nw=primepi(w);
printf("%d pattern L=%d\n",pt,pl);
prs=primes(nw);
period=vecprod(prs);
print(period," period");
wd=vector(nw);
q=0;
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) );
wd[ip]=rip;
); \\for ip
wk=vector(nw,i,#wd[i]); print(wk);
wpk=vector(nw);wpk[nw]=1;
forstep(i=nw-1,1,-1,wpk[i]=wpk[i+1]*wk[i+1]; );
for( fn=1,#forms, form=forms[fn];
fr=vector(nw,i,form%prs[i]);
rn=vector(nw);
for( i=1, nw,
for( j=1,wk[i], if(fr[i]==wd[i][j], rn[i]=j; break)
));
if( vecprod(rn)==0, next
, q++; dob[q]=form;
);
);
dob11=vector(q);
for(l=1,q, dob11[l]=dob[l]; );
print("found dobavok: ",q);
print("last dobavka = ",dob11[q]); print();
for(j=1,q,
k=0;
if(ispseudoprime(dob11[j]+pt[11]),
forprime(p=dob11[j],dob11[j]+pt[11], k++; vmy[k]=p; );
if(k==11,
for(m=2,11, pat1[m]=vmy[m]-vmy[1]; );
if(pat1==pt, print("FOUND !!!"); print(vmy[1],": ",pat1); print ();
);\\if pat1
); \\ if k=11
); \\ if ispseudoprime
);\\for
}Отмечу ещё раз: эту программу писал gris, я только немножко подкорректировала. Пробуйте, господа! Тест, например, выполните. Сообщите, пожалуйста, ваши предложения по оптимизации программы. Но оптимизация должна быть убойная! Убыстрение должно быть, как у г. Петухова - в 730000 раз! :)) Вот тогда всё точно сработает! P. S. Предупреждение: программа требует довольно много памяти allocatemem(2^30); The TBEG BOINC project maintains the database https://boinc.tbrada.eu/spt/explore.php |
Natalia MakarovaSend message Joined: 24 Dec 24 Posts: 2187 Credit: 16,991,036 RAC: 1,267 |
А ещё знаете что... Жаль, что не могу никому написать на dxdy.ru. Там такие результаты от ИИ показывают! А вот и поспрашивайте, пожалуйста, у крутых ИИ, что они могут предложить. чтобы показанная программа работала не 8 минут, как она у меня работает на черепашке, а миллионные доли секунды. Алгоритм ведь такой простой! И генерация простых чисел работает секунды, то есть этот этап сильно не тормозит. Всё затыкается на программе проверки простых чисел на добавки, которая показана выше. The TBEG BOINC project maintains the database https://boinc.tbrada.eu/spt/explore.php |
Natalia MakarovaSend message Joined: 24 Dec 24 Posts: 2187 Credit: 16,991,036 RAC: 1,267 |
Покажу ещё одно тестирование предложенного алгоритма. Буду тестировать для минимальной центральной 11-ки, вот этой 10053816392329: [0, 30, 48, 54, 78, 84, 90, 114, 120, 138, 168] 10053816392329: [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0] 10053816392329: [1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1] valids=11 code=511 Начну генерацию простых чисел с этого натурального числа: 10053500000000, чтобы начальное число тестируемого кортежа попало в сгенерированную порцию простых чисел. Запускаю пакетный файл primesieve 10053500000000 10053900000000 --print >inp1.txt gp.exe -q number_formvar.txt Получаю результат C:\Users\Admin\Downloads\primesieve-5.0-win64-console>primesieve 10053500000000 10053900000000 --print 1>inp1.txt C:\Users\Admin\Downloads\primesieve-5.0-win64-console>gp.exe -q number_formvar.t xt *** Warning: new stack size = 1073741824 (1024.000 Mbytes). log = 1 (on) [logfile is "number_formVar_res.txt"] [0,30,48,54,78,84,90,114,120,138,168] pattern L=11 32589158477190044730 period [1, 2, 2, 2, 2, 4, 6, 10, 14, 18, 20, 26, 30, 32, 36, 42] found dobavok: 2201 last dobavka = 10053899734049 FOUND !!! 10053816392329: [0, 30, 48, 54, 78, 84, 90, 114, 120, 138, 168] Кортеж найден! Сгенерировано простых чисел: 13357958; среди этих простых чисел имеется 2201 добавка; среди этих добавок находится та, которая стартует кортеж. Всё абсолютно чётко. Замечу, что в этом интервале нашлось больше 2000 добавок. Надо на всякий случай увеличить длину вектора добавок; сейчас у меня задана длина 2500, этого вполне хватает для тех интервалов, в которых я работаю, больше 2000 добавок не генерируется. The TBEG BOINC project maintains the database https://boinc.tbrada.eu/spt/explore.php |
Natalia MakarovaSend message Joined: 24 Dec 24 Posts: 2187 Credit: 16,991,036 RAC: 1,267 |
Вчера спросила Квена про оптимизацию показанной программы. Он начал сыпать идеи, в рамках PARI/GP. При этом идеи мне непонятные. Например, при проверке простых чисел на добавки использовать не цикл, а векторизацию. Я ему говорю: "Как реализовывать будете свои идеи?". Да, забыла: он сразу же после моего вопросы выкатил скрипт и сказал: "Запускайте, ускорение будет в десятки раз. Жду ваши впечатления." На это я ему ответила: "Ну, запускать ваш скрипт я не буду, потому что знаю, что на отладку скрипта потребуются часы. Расскажите, пожалуйста, ваши идеи по оптимизации." Так вот, после третьей или четвёртой идеи я ему говорю: "Давайте так: вы пишете скрипт, в котором реализуете все эти идеи, но такой скрипт, который не потребует несколько часов на отладку, то есть он будет сразу работать." После этого он расписался в своём бессилии. Цитирую его ответ Наталия, я должен быть честным с вами. Ну вот и приплыли. ИИ не гарантирует, что его скрипт будет работающим! Нафиг мне нужен такой скрипт. The TBEG BOINC project maintains the database https://boinc.tbrada.eu/spt/explore.php |
©2026 Natalia Makarova and Co