Message boards :
Number crunching :
Помощь в запуске BOINC-проекта SPT
Message board moderation
Author | Message |
---|---|
![]() Send message Joined: 14 Jun 23 Posts: 321 Credit: 280,293 RAC: 0 ![]() |
Пока предпринята попытка запустить тестовый проект от разработчика. Есть проблема с получением заданий на выполнение. Просим помощи. _________________ So far, an attempt has been made to launch a test project from the developer. There is a problem with getting tasks to execute. Please help. |
![]() Send message Joined: 14 Jun 23 Posts: 321 Credit: 280,293 RAC: 0 ![]() |
Есть такой ответ на форуме французской команды https://forum.boinc-af.org/index.php/topic,8014.150.html He must join boinc_projects mailing list to write there to explain (clearly, not "I have a problem") and try to get some help from boinc project devs. |
![]() Send message Joined: 14 Jun 23 Posts: 321 Credit: 280,293 RAC: 0 ![]() |
Господа! Пока я постараюсь рассказать, что можно запустить в BOINC-проекте по поиску симметричных кортежей из последовательных простых чисел (кратко проект называется SPT). Первый вариант - это алгоритм брутфорса, реализованный давно моим коллегой Алексеем Белышевым. Программа Белышева работала в обоих остановленных BOINC-проектах по поиску кортежей: Stop@home и T. Brada Experimental Grid. Пожалуйста, посмотрите сообщение https://boinc.progger.info/odlk/forum_thread.php?id=196&postid=11851 Это из моей беседы с GPT-4. Цитирую От проекта T. Brada Experimental Grid сохранился код программы Далее читайте в указанном сообщении ответ GPT-4. По-моему, он рассказал всё правильно. То есть этот вариант можно попробовать запустить. К тому же, совсем не обязательно использовать именно код Tomas Brada, если с этим кодом возникнут сложности. Можно использовать оригинальный исходный код Белышева и на его основе сделать расчётный модуль для BOINC-проекта. О другом варианте запуска BOINC-проекта смотрите далее. PS. Большим недостатком программы Белышева является то, что диапазон поиска кортежей оганичен. Смотрите снова мою беседу с GPT-4 в сообщении https://boinc.progger.info/odlk/forum_thread.php?id=196&postid=11850 Вопрос: Вы уверены, что генератор primesieve может генерировать простые числа, превышающие 2^64? Ответ GPT-4: Приношу извинения за недостаточно точный ответ на ваш предыдущий вопрос. Генератор primesieve позволяет генерировать простые числа до 2^64 - 1, то есть максимально возможное простое число, которое можно сгенерировать с помощью primesieve, равно 18446744073709551615. Немного не точно сказано о максимально возможном простом числе, ибо число 18446744073709551615 не является простым. Но суть ясна: диапазон генерируемых генератором primesieve простых чисел ограничен числом 2^64. Однако до этого значения нам идти ещё долго, в BOINC-проекте TBEG проверен диапазон чуть дальше числа 4663163081869749997. Последний найденный кортеж длины 13 4663163081869749997: 0 60 66 96 114 144 210 276 306 324 354 360 420 Смотрите https://boinc.tbrada.eu/spt/tuples.php?spt=13&p=5 PS. Уточняю последний диапазон, проверенный в BOINC-проекте TBEG. Цитата Последняя партия (проверяемый диапазон) в BOINC-проекте TBEG https://boinc.tbrada.eu/forum_thread.php?id=3055&postid=4761 Смотрите сообщение https://boinc.progger.info/odlk/forum_thread.php?id=233&postid=10709 |
![]() Send message Joined: 14 Jun 23 Posts: 321 Credit: 280,293 RAC: 0 ![]() |
Замечание: программа Белышева ищет кортежи чётных и нечётных длин. В одной версии программы длины кортежей: 12 - 33, в другой версии: 16 - 33. В запускаемом проекте желательно сосредоточиться на поиске кортежей нечётных длин. Проблемной нечётной длиной на данный момент является длина 19. Симметричный кортеж длины 19 из последовательных простых чисел до сих пор не найден! |
![]() Send message Joined: 14 Jun 23 Posts: 321 Credit: 280,293 RAC: 0 ![]() |
Второй вариант запуска - поиск кортежей нечётных длин, в частности - длины 19. Здесь надо использовать разработанные мной алгоритмы, два из которых находятся в работе в данный момент. В поиске симметричного кортежа длины 19 из последовательных простых чисел (далее кратко - 19-ка) есть две подзадачи: 1) поиск 19-ки с минимальным диаметром 252; 2) поиск 19-ки с любым другим диаметром. Мои алгоритмы охватывают обе подзадачи. Рекомендую посмотреть следующие темы: 1) Нерешённая проблема теории чисел https://boinc.progger.info/odlk/forum_thread.php?id=224#8218 2) К штурму 19-ки https://boinc.progger.info/odlk/forum_thread.php?id=237 3) Специальный генератор простых чисел https://boinc.progger.info/odlk/forum_thread.php?id=247 4) Manual mode of the "Symmetric Prime Tuples" project https://boinc.progger.info/odlk/forum_thread.php?id=233 |
![]() Send message Joined: 14 Jun 23 Posts: 321 Credit: 280,293 RAC: 0 ![]() |
Цитата PS. Уточняю последний диапазон, проверенный в BOINC-проекте TBEG. Потом последовало продолжение в ручном проекте. Были найдены следующие 13-ки (непосредственно в данном диапазоне, продолжающем проверенный в проекте TBEG диапазон) 4663219376162424643: 0 18 30 48 60 66 108 150 156 168 186 198 216 4663251768340014749: 0 30 42 72 78 102 120 138 162 168 198 210 240 4663276951683539461: 0 6 48 90 156 186 198 210 240 306 348 390 396 4663290868594401713: 0 18 126 138 168 180 258 336 348 378 390 498 516 4663299607736746799: 0 30 120 210 240 264 294 324 348 378 468 558 588 4663320217379003569: 0 12 30 42 72 78 120 162 168 198 210 228 240 4663360279639155637: 0 12 30 72 90 96 126 156 162 180 222 240 252 4663364077719146873: 0 36 66 90 108 168 318 468 528 546 570 600 636 4663401855007899281: 0 12 90 108 120 132 150 168 180 192 210 288 300 4663405445023241869: 0 18 72 102 168 192 210 228 252 318 348 402 420 4663419383535982451: 0 6 30 72 96 120 126 132 156 180 222 246 252 4663430006310634703: 0 18 30 48 60 96 198 300 336 348 366 378 396 4663488067021729051: 0 30 36 126 168 186 198 210 228 270 360 366 396 4663488752091826781: 0 36 48 60 120 126 168 210 216 276 288 300 336 4663609416460008901: 0 12 42 78 132 138 150 162 168 222 258 288 300 4663625504815848469: 0 54 84 150 192 204 222 240 252 294 360 390 444 4663699800024890483: 0 18 48 60 66 126 138 150 210 216 228 258 276 4663722037876034801: 0 12 78 108 150 162 180 198 210 252 282 348 360 4663737243739394063: 0 60 78 138 144 168 174 180 204 210 270 288 348 4663747367776063739: 0 12 30 42 78 102 120 138 162 198 210 228 240 4663830253978175177: 0 30 36 42 72 156 186 216 300 330 336 342 372 4663845760376153941: 0 18 30 72 90 102 150 198 210 228 270 282 300 4663854611401124519: 0 24 48 108 120 174 204 234 288 300 360 384 408 4663861558086461147: 0 6 36 120 132 156 186 216 240 252 336 366 372 15-ка в этом диапазоне найдена всего одна 4663699800024890453: 0 30 48 78 90 96 156 168 180 240 246 258 288 306 336 Более точное окончание проверенного диапазона смотрим в последней найденной 12-ке 4663878384525935453: 0 8 14 36 48 68 126 146 158 180 186 194 Вот отсюда и надо продолжить работу программы Белышева. У меня в ручном проекте проверяются и сейчас некоторые диапазоны программой Белышева. Например, диапазон, в котором найдены следующие 13-ки 7896570594100408739: 0 30 78 150 162 168 180 192 198 210 282 330 360 7896574896175076017: 0 30 84 102 114 144 162 180 210 222 240 294 324 7896619749725244767: 0 6 36 54 66 120 150 180 234 246 264 294 300 Этот диапазон проверяется на моём личном ПК. Ещё два диапазона проверяются на компьютере с удалённым управлением, который мне предоставил коллега. |
![]() Send message Joined: 14 Jun 23 Posts: 321 Credit: 280,293 RAC: 0 ![]() |
Программа Алексея Белышева поиск симметричных кортежей длины 16 - 33 из последовательных простых чисел язык С++ #include <iostream> #include <iomanip> #include <fstream> #include <sstream> #include <vector> #include <set> #include <ctime> #include <Windows.h> #include "primesieve.h" using namespace std; typedef unsigned long long ull; enum poziciya{chasy,minuty,sekundy,sdelano,vremya,interval,provereno,skorostq,vsego_16,konec}; enum shablony{s_16=15,s_17,s_18,s_19,s_20,s_21,s_22,s_23,s_24,s_25,s_26,s_27,s_28,s_29,s_30,s_31,s_32,s_33}; const int dlina_intervala = 2000000000; const int chislo_shablonov = 18; const int max_smew = ((s_33 + 1) >> 1); const int centr = (s_33 >> 1) - 1; const int ss = 100; const int sss = 1000000; const COORD koord[] = {{40,0},{51,0},{54,0},{13,2},{49,0},{0,1},{0,2},{0,3},{12,4},{0,22}}; class _kursor{ HANDLE ScrHandle; public: _kursor(){ScrHandle = GetStdHandle(STD_OUTPUT_HANDLE);} void skrytq(){ CONSOLE_CURSOR_INFO kursinf; GetConsoleCursorInfo(ScrHandle , &kursinf); kursinf.bVisible = false; SetConsoleCursorInfo(ScrHandle , &kursinf); } void pokazatq(){ CONSOLE_CURSOR_INFO kursinf; GetConsoleCursorInfo(ScrHandle , &kursinf); kursinf.bVisible = true; SetConsoleCursorInfo(ScrHandle , &kursinf); } void pomestitq(COORD z){SetConsoleCursorPosition(ScrHandle, z);} } kursor; HANDLE hpotok; DWORD idpotok; UINT_PTR idTimer; int speed, najdeno[chislo_shablonov]; ull start, endint, max_stop = primesieve::get_max_stop(); unsigned progress; bool otobr, poisk, pros, provr; vector<ull> primes; clock_t nachtik; void __stdcall TimerProc(HWND, UINT, UINT, DWORD); DWORD __stdcall potok(void*); bool vypolnitq(); bool init(int nabor[]); void proverka(int nabor[]); void vyvod(long long stprime, int nabor[], int st, int shablon); void prov_ne_poln(int nabor[]); void prov_nach_ne_poln(int nabor[]); inline void vremya_vyvod(){ static int tik, minuta, chas; if(tik > 57){ tik = 0; if(minuta > 58){ minuta = 0; chas++; kursor.pomestitq(koord[chasy]); cout << setw(10) << chas; } else minuta++; kursor.pomestitq(koord[minuty]); cout << setw(2) << setfill('0') << minuta; kursor.pomestitq(koord[sekundy]); cout << setw(2) << tik << setfill(' '); } else{ tik +=2; kursor.pomestitq(koord[sekundy]); cout << setw(2) << setfill('0') << tik << setfill(' '); } } inline void inf_pros(){ kursor.pomestitq(koord[interval]); cout << "Текущий интервал: [" << start << " ... " << endint << "]\nПросеяно : 0%"; kursor.pomestitq(koord[skorostq]); cout << "Скорость : "; if(speed) cout << setw(6) << speed; else for(int i = s_16; i <= s_33; i++) cout << "\nНайдено " << (i + 1) << ':'; pros = false; } inline void inf_provr(){ kursor.pomestitq(koord[provereno]); cout << "Проверено : 0%"; provr = false; } inline void inf_otobr(){ unsigned t; kursor.pomestitq(koord[sdelano]); if(poisk){ t = progress / ((primes.size() - 1) / ss); cout << setw(5) << t; COORD krd = koord[vsego_16]; for(int i = 0; i < chislo_shablonov; i++, krd.Y++){ kursor.pomestitq(krd); cout << setw(6) << najdeno[i]; } } else{ t = primes.size() / sss; cout << setw(5) << t; } } inline void proverka_ch(int nabor[], int st, int i){ for(int j = 1, t = centr + st; j <= 7; j++){ if(nabor[(t - j) & s_32] != nabor[(t + j) & s_32]) return; } vyvod(primes[i - s_25], nabor, st + 8, s_16); for(int j = 8, t = centr + st; j <= centr; j++){ if(nabor[(t - j) & s_32] != nabor[(t + j) & s_32]) return; vyvod(primes[i - s_18 - j], nabor, st + s_16 - j, s_16 + ((j - 7) << 1)); } } inline void proverka_nch(int nabor[], int st, int i){ for(int j = 0, t = centr + st; j <= 7; j++){ if(nabor[(t - j) & s_32] != nabor[(t + j + 1) & s_32]) return; } vyvod(primes[i - s_25], nabor, st + 8, s_17); for(int j = 8, t = centr + st; j <= centr; j++){ if(nabor[(t - j) & s_32] != nabor[(t + j + 1) & s_32]) return; vyvod(primes[i - s_18 - j], nabor, st + s_16 - j, s_17 + ((j - 7) << 1)); } } inline void prov_nach(int nabor[], int i, int k){ for(int j = 0; j < (i >> 1); j++) if(nabor[k + j] != nabor[i - 1 + k - j]) return; vyvod(primes[k], nabor, k, i); } int main(){ setlocale(LC_CTYPE, "rus"); system("cls"); kursor.skrytq(); cout << "Поиск ассоциативных наборов простых"; kursor.pomestitq(koord[vremya]); cout << "0:00:00"; hpotok = CreateThread(NULL, 0, potok, NULL, 0, &idpotok); idTimer = SetTimer(NULL, 1, 2000, TimerProc); MSG msg; while(true){ GetMessage(&msg, NULL, 0, 0); DispatchMessage(&msg); } return 0; } DWORD __stdcall potok(void*){ ifstream fin("start.txt"); if(fin) fin >> start; fin.close(); start &= 0xfffffffffffffffe; while(vypolnitq()); KillTimer(NULL, idTimer); Sleep(100); cout << "\n\nДостигнут максимум " << max_stop << "\nДля выхода нажмите любую клавишу . . .\n"; system("pause > nul"); kursor.pokazatq(); exit(0); return 0; } void __stdcall TimerProc(HWND, UINT, UINT, DWORD){ vremya_vyvod(); if(pros) inf_pros(); if(provr) inf_provr(); if(otobr) inf_otobr(); kursor.pomestitq(koord[konec]); } bool vypolnitq(){ if(start >= max_stop) return false; endint = min(start + dlina_intervala, max_stop); if(!otobr) otobr = true; pros = true; poisk = false; primes.clear(); nachtik = clock(); primesieve::generate_primes(start, endint, &primes); if(primes.size() <= s_16) return false; int nabor[s_33]; if(!init(nabor)) return false; proverka(nabor); return true; } bool init(int nabor[]){ static bool inicial; if(inicial){ if(primes.size() <= s_33){ if(primes.size() == s_33) prov_ne_poln(nabor); return false; } for(int i = 0; i < s_33; i++) nabor[i] = int(primes[i + 1] - primes[i]); }else{ if(primes.size() <= s_33){ prov_nach_ne_poln(nabor); return false; } for(int i = 0; i < s_33; i++) nabor[i] = int(primes[i + 1] - primes[i]); for(int i = s_16; i <= s_30; i++) for(int k = 0; k < max_smew - ((i + 1) >> 1); k++) prov_nach(nabor, i, k); inicial = true; } return true; } void proverka(int nabor[]){ poisk = provr = true; int st = 0; for(size_t i = s_33;; i++){ proverka_ch(nabor, st, i); proverka_nch(nabor, st, i); if(i >= primes.size() - 1) break; nabor[st] = int(primes[i + 1] - primes[i]); st = (st + 1) & s_32; progress = i; } speed = int(7200000.0 / (clock() - nachtik) + 0.5); start = primes[primes.size() - s_33] - 1; ofstream fout("start.txt"); fout << start; fout.close(); } //s_17 - ((shablon + 1) >> 1) void vyvod(long long stprime, int nabor[], int st, int shablon){ ostringstream imya; imya << "kpppch_" << (shablon + 1) << ".txt"; ofstream fout(imya.str(), ios::out | ios::app); fout << stprime << ": 0"; for(int i = 0, sum = 0; i < shablon; i++) fout << ' ' << (sum += nabor[(st + i) & s_32]); fout << endl; najdeno[shablon - s_16]++; } void prov_ne_poln(int nabor[]){ for(int i = 0; i < s_32; i++) nabor[i] = int(primes[i + 1] - primes[i]); for(int i = s_16; i <= s_31; i++){ for(int j = s_16 - ((i + 1) >> 1); j <= s_20 - ((i + 2) >> 1); j++){ for(int k = 0; k < (i >> 1); k++){if(nabor[k + j] != nabor[i - 1 - k + j]) goto next;} vyvod(primes[j], nabor, j, i); next: ; } } } void prov_nach_ne_poln(int nabor[]){ int raz = primes.size() - 1; for(int i = 0; i < raz; i++) nabor[i] = int(primes[i + 1] - primes[i]); for(int i = s_16; i <= raz; i++){ for(int j = 0; j <= raz - i; j++){ for(int k = 0; k < (i >> 1); k++){if(nabor[k + j] != nabor[i - 1 - k + j]) goto next;} vyvod(primes[j], nabor, j, i); next: ; } } } Господа! Если вы умеете создавать Приложение для BOINC-проекта, пожалуйста, подключайтесь к нашей команде. Мы можем прямо сейчас готовить первое Приложение, основанное на программе Белышева. Белышев использовал для генерации простых чисел генератор primesieve. |
![]() Send message Joined: 14 Jun 23 Posts: 321 Credit: 280,293 RAC: 0 ![]() |
Ещё есть огромная тема "About Stop@home project" https://boinc.progger.info/odlk/forum_thread.php?id=49 Сейчас просматривала эту тему и нашла интересное сообщение https://boinc.progger.info/odlk/forum_thread.php?id=49&postid=4531 Цитата I once downloaded the version of this program primesieve_5.0_win64 Здесь информация о генераторе primesieve; может, будет полезна. |
![]() Send message Joined: 14 Jun 23 Posts: 321 Credit: 280,293 RAC: 0 ![]() |
Как работает программа Белышева Для работы программы Белышева требуется задать начало проверяемого диапазона, которое должно быть записано во входном файле start.txt Например, 4663878384525935453 Недостаток программы в том, что она не принимает конец проверяемого диапазона. Это надо будет исправить. Клиент должен получить конечный диапазон для проверки, например [4663878384525935453,4663878400000000000] Как выбрать длину проверяемого диапазона? Скорость программы Белышева примерно 200-300 миллиардов натуральных чисел в час. Это зависит от производительности компьютера. Вот на эту скорость надо ориентироваться. Для выполнения одного задания (WU) можно выделить примерно один час. Следовательно, длина диапазона может быть в пределах 200-300 миллиардов натуральных чисел. В программе Белышева есть чекпоинт, что очень хорошо. Если программа будет нештатно прервана, конец последнего проверенного интервала будет записан в файл start.txt Для дальнейшей проверки надо просто перезапустить программу, она начнёт работать с прерванного места. Однако это не всегда корректно работает, если одновременно работают несколько копий программы. В программе Белышева реализован алгоритм грубой силы (брутфорс). С помощью генератора primesieve генерируются простые числа в интервале длиной 2 миллиарда (натуральных чисел); затем выполняется тотальная проверка в массиве сгенерированных простых чисел; после проверки повторяется генерация простых чисел в следующем интервале длиной 2 миллиарда. |
![]() Send message Joined: 14 Jun 23 Posts: 321 Credit: 280,293 RAC: 0 ![]() |
Господа! Вы уже всё знаете о программе Белышева. Вы можете начать подготовку Приложения 1, если у вас есть соответствующие знания и опыт. Подключайтесь к нашей команде, пожалуйста. Это поможет ускорить запуск BOINC-проекта. Как уже написано выше, в проекте планируется Приложение 2. Это Приложение будет основано на разработанных мной алгоритмах. Действующих в данный момент алгоритмов два. Может быть, каждый алгоритм будет запущен в отдельном Приложении; скорее всего, именно так и будет. То есть будут ещё Приложение 2 и Приложение 3. Оба алгоритма в данный момент работают в ручном проекте и дают неплохие результаты. Один из алгоритмов был опробован в эксперименте с распределёнными вычислениями. Смотрите тему https://boinc.progger.info/odlk/forum_thread.php?id=243 К сожалению, участник эксперимента был всего один (не считая меня). Сейчас эксперимент остановлен. То есть он мог бы продолжаться, но желающих считать нет. У меня всё продолжает работать. Десять WU (61 - 70), которые ещё никто не считал, вы можете найти в архиве SPT_manually.7z по ссылке https://disk.yandex.ru/d/SPRlGAZMfq0s2g Если хотите, посмотрите, как это работает. Скачайте задания и запустите их на выполнение. Мы можем начинать подготовку Приложения 2. |
![]() Send message Joined: 14 Jun 23 Posts: 321 Credit: 280,293 RAC: 0 ![]() |
Приведу сообщение с форума boinc.ru. Речь идёт о запуске с помощью обёртки BOINC. Копия сообщения https://boinc.ru/forum/topic/proekt-hugo-van-der-sanden/?part=13#postid-7362 Прочитать можно вот здесь: The BOINC Wrapper. Но, возможно, что объяснение ниже будет проще. |
![]() Send message Joined: 14 Jun 23 Posts: 321 Credit: 280,293 RAC: 0 ![]() |
Программы, реализующие мои алгоритмы, написаны на языке PARI/GP. Коллеги считают, что такие вычислительные модули могут быть запущены с помощью обёртки BOINC. Ещё одна интересная идея была предложена на форуме немецкой команды. Michael H.W. Weber https://www.rechenkraft.net/forum/viewtopic.php?p=193771#p193771 Я хотела обсудить эту идею на форуме boinc.ru https://boinc.ru/forum/topic/proekt-parihome/ Увы! Меня (как клона) забанили. Идея пока не реализована. Michael H.W. Weber писал 17 мая т. г. P.S.: Ein kleiner Test-Server läuft übrigens inzwischen und den nutze ich zu Zeiten, wo ich in meiner Freizeit Spass daran habe, um dort die französische PARI Infrastruktur aufzusetzen. Wenn das irgendwann ordentlich als BOINC-Server läuft, könnten wir Deinen Code dort laufen lassen. https://www.rechenkraft.net/forum/viewtopic.php?p=194205#p194205 Прошёл месяц, а воз и ныне там. Идею можно тоже рассмотреть, как вспомогательную. Возможно, будет полезна. Насколько понимаю, Michael H.W. Weber предполагал, что созданная им платформа PARI@home позволит запустить любую программу, написанную на PARI/GP. Что ж, по-моему, идея неплохая. Только неизвестно, будет ли она реализована. |
![]() Send message Joined: 14 Jun 23 Posts: 321 Credit: 280,293 RAC: 0 ![]() |
Как видите, господа, у нас много идей, несколько действующих алгоритмов. Надо создавать Приложения для запускаемого проекта. Присоединяйтесь к нам, работы хватит всем! Если вы хотите задать вопросы и получить ответ на английском языке, пожалуйста. Я отвечу вам по-английски. |
![]() Send message Joined: 14 Jun 23 Posts: 321 Credit: 280,293 RAC: 0 ![]() |
Самый первый алгоритм поиска 19-ки с минимальным диаметром 252 я предложила на форуме немецкой команды 28 марта т. г. https://www.rechenkraft.net/forum/viewtopic.php?p=193708#p193708 Привожу сообщение полностью Nataly-Mak post_id=193708 time=1680015743 user_id=16759 wrote:
Очень надеялась, что там смогут запустить BOINC-проект на платформе yoyo@home. Больше двух месяцев продолжалось обсуждение; никаких запусков нигде не произошло. Увы! |
![]() Send message Joined: 14 Jun 23 Posts: 321 Credit: 280,293 RAC: 0 ![]() |
Репост https://boinc.tbrada.eu/forum_thread.php?id=3159&postid=4791 Two colleagues are trying to restore the SPT project that was stopped here |
![]() Send message Joined: 14 Jun 23 Posts: 321 Credit: 280,293 RAC: 0 ![]() |
Господа! Пока запуск BOINC-проекта, увы, не произошёл. Я полностью подготовила программу своего алгоритма для запуска в BOINC-проекте. Вот текст программы на PARI/GP {\\ 27.06.2023 i1=32688925269558999998000; i2=32688925269569000000000; kp=0; lmin=17; ltuple=11; \\ ********************** M=matrix(10000,36); k=0; p=nextprime(i1); pt=[p]; n=1; while(p<i2, kp++; pn=nextprime(p+1); if( (pn-p)%6==0, n++; p=pn; pt=concat(pt,p), if( n>lmin-1, k++; pd=vector(n-1,i,pt[i+1]-pt[i]); M[k,1]=pt[1]; for(l=2,n, M[k,l]=pd[l-1]; );); n=1; p=pn; pt=[p]; ); ); \\ find symmetrical tuples fout = fileopen("tuple_sym.txt","w"); ksym=0; for( iii=1,k, d=[]; for(l=2,30, if( M[iii,l]==0, break ); d=concat(d, M[iii,l]); ); \\ l ld=#d; forstep( kl=ltuple-1,ld,2, kl05=kl\2; kpr=ld-kl+1; for ( ipr=1,kpr, for( mm=1, kl05, if( d[mm+ipr-1]!=d[kl+ipr-mm], next(2) ) ); \\ mm \\ we see symmetrical vector from ipr to ipr+kl ksym++; \\printf("from %d", M[iii,1..ld+2]);print(); tp1=M[iii,1];if( ipr>1,tp1=tp1+vecsum(d[1..ipr-1]) ); w=strprintf( "%d %d: %d",kl+1, tp1, d[ipr..ipr+kl-1] ); print(w); filewrite(fout,w); ); \\ ipr ); \\kl ); \\iii print(); print("total ", k, " tuples"); print( ksym, " symmetrical tuples"); print(kp," primes in "); print(i1);print(i2-2000); fileclose(fout) } Для работы этой программы необходима программная оболочка gp.exe. Эту программу можно скачать по ссылке, она в архиве https://disk.yandex.ru/d/SPRlGAZMfq0s2g Есть вопрос по способу задания интервала поиска. Смотрите сообщение https://boinc.progger.info/odlk/forum_thread.php?id=247&postid=12024 Результаты программа записывает в выходной файл tuple_sym.txt в конце работы. Вроде есть всё нужное для подготовки и запуска Приложения 2 по данному алгоритму, разработанному мной. Объединение программы генерации последовательностей и программы их обработки выполнил коллега gris. Если кто-то может помочь в подготовке этого Приложения, пишите мне, пожалуйста, natalimak1@yandex.ru, или ЛС здесь. Или пишите ЛС администратору проекта Corporal. Правда, работа ЛС пока не проверена. Я думаю, что это Приложение может быть запущено с помощью обёртки BOINC. Об использовании обёртки BOINC смотрите сообщение https://boinc.termit.me/adsl/forum_thread.php?id=2&postid=19 Замечу ещё раз: вы можете писать в этой теме и задавать ваши вопросы по-английски. Я буду отвечать вам тоже по-английски. |
![]() Send message Joined: 14 Jun 23 Posts: 321 Credit: 280,293 RAC: 0 ![]() |
Это протокол работы опубликованной программы на моём ПК (03:36) gp > default(timer,1) (03:36) gp > \r gener_my3.txt total 460 tuples 0 symmetrical tuples 192892819 primes in 32688925269548999998000 32688925269558999998000 time = 4h, 45min, 18,348 ms. Интервал длины 10 миллиардов обрабатывался 4 ч. 45 мин. У меня низкопроизводительный ПК - 2,4 Ггц. На вашем ПК эта программа выполнится гораздо быстрее. |
![]() Send message Joined: 14 Jun 23 Posts: 321 Credit: 280,293 RAC: 0 ![]() |
В опубликованной версии интервал поиска задан прямо в программе, вот эти строки i1=32688925269558999998000; i2=32688925269569000000000; Если вы хотите задавать интервал поиска во входном файле inp.txt, то в программе вместо показанных строк надо записать следующие строки tin = fileopen("inp.txt"); i1=eval(filereadstr(tin)); i2=eval(filereadstr(tin)); fileclose(tin); А во входном файле inp.txt записать интервал в таком виде 32688925269558999998000 32688925269569000000000 В первой строке начало интервала, во второй строке конец интервала. Далее вы изменяете интервал во входном файле и запускаете программу на выполнение. Длину интервала вы можете задавать по своему усмотрению. Понятно, что от длины интервала зависит время работы программы. И ещё один нюанс: интервалы должны чуть-чуть перекрываться на стыке. Для этого от конца обработанного интервала я вычитаю 2000 и получаю начало следующего интервала. |
![]() Send message Joined: 14 Jun 23 Posts: 321 Credit: 280,293 RAC: 0 ![]() |
Ещё подробнее о задании интервалов поиска. Сейчас у меня на ПК проверяется интервал i1=32688925269588999998000; i2=32688925269599000000000; Длина этого интервала 10 миллиардов (если не считать перекрытия в 2000). Такой интервал на моём ПК обрабатывается за время time = 4h, 47min, 20,170 ms. Давайте будем задавать интервалы поменьше - 5 миллиардов, чтобы время работы программы было меньше. Привожу пример первых 10 интервалов, продолжая показанный выше интервал 1) 32688925269599999998000 32688925269605000000000 2) 32688925269604999998000 32688925269610000000000 3) 32688925269609999998000 32688925269615000000000 4) 32688925269614999998000 32688925269620000000000 5) 32688925269619999998000 32688925269625000000000 6) 32688925269624999998000 32688925269630000000000 7) 32688925269629999998000 32688925269635000000000 8) 32688925269634999998000 32688925269640000000000 9) 32688925269639999998000 32688925269645000000000 10) 32688925269644999998000 32688925269650000000000 Надеюсь, принцип понятен. |
![]() Send message Joined: 14 Jun 23 Posts: 321 Credit: 280,293 RAC: 0 ![]() |
Итак, что вам надо сделать, чтобы попробовать работу этого алгоритма? 1. Возьмите в архиве по следующей ссылке программу gp.exe https://disk.yandex.ru/d/SPRlGAZMfq0s2g 2) В папке, где у вас программа gp.exe создайте текстовый файл inp.txt и запишите в него интервал для проверки, например, первый 32688925269599999998000 32688925269605000000000 3) В этой же папке создайте текстовый файл с любым именем (например, spt.txt) и запишите в него рабочую программу. Программу я ещё раз приведу далее. 4) Запустите программу gp.exe. В открывшемся окне напишите команду запуска рабочей программы \r spt.txt Всё! Программа будет работать. Если результаты будут найдены, программа запишет их в файл tuple_sym.txt Когда программа завершится, на консоли появится некоторая информация о результатах. Если вы хотите обработать все 10 интервалов одновременно и у вас есть для этого возможности (многоядерный процессор), создайте всё то же самое в другой папке (конечно, с другим интервалом поиска в файле inp.txt) и запустите программу в этой папке. Затем в следующей папке и т. д. Пожалуйста, опробуйте работу программы. На моём ПК программа работает хорошо. Я обрабатываю интервалы в один поток, так как не имею возможности параллельной работы нескольких программ. Может быть, у вас есть какие-то предложения по улучшению работы программы. Пожалуйста, сообщите о них. Я понимаю, что для работы в BOINC-проекте надо убрать вывод на консоль, но не знаю, как это сделать. |
©2024 Natalia Makarova & Alex Belyshev & Tomáš Brada