Прошу прощения, похоже программа неверная, вышла не биекция, или я ошибся с тестом. Сейчас разберусь и снова выложу.
Поправил.
Программа установления биекции между списком паттернов Hugo (из приложенного файла patterns_Hugo.txt) и моим списком паттернов (из приложенного файла patterns_Dmitriy.txt):
Код:
Hugo=readstr("patterns_Hugo.txt"); Dima=readstr("patterns_Dmitriy.txt");
vv=vector(#Dima,i,eval(Dima[i]);v); for(i=1,#vv, n=9-eval(strsplit(strsplit(Dima[i],"@")[2],"-")[3]); vv[i]=vv[i][n..n+10]);\\Укорочение моего паттерна до 11
{for(i=1,#Hugo,
s1=strsplit(Hugo[i],":"); b=s1[1];\\Номер паттерна Hugo
s=strsplit(s1[2]," "); h=vector(11);
for(t=1,11,
if(s[t+1]==".", h[t]=1;next);\\Пустое место
ss=strjoin(strsplit(strsplit(s[t+1],"p")[1],"."),"*");
h[t]=eval(ss);
);
for(d=1,#Dima,
if(h!=vv[d], next);
s=strsplit(Dima[d],"*"); w=strprintf("%s*%s,%5s*%s", s[1],s[2],b,s[3]); write("patterns_sort_by_Hugo.txt",w);
vv[d]=vector(11);\\Больше его учитывать не будем
break;
);
)}
При запуске за несколько секунд в мой список паттернов будут добавлены номера Hugo и результат сохранится в приложенный файл patterns_sort_by_Hugo.txt, пара примеров оттуда (начало, середина и конец):
/* 42688800, 30086041, b0*/ v=[ 1, 14, 3, 4, 605, 18, 1, 32, 147, 50, 1, 12, 1, 2, 45]; z=[0,0,0,0,6,6,1,6,6,6,1,6,1,2,6]; n=7; pp=Mod(30086041,42688800);\\@LCM42688800-30086041-4
...
/* 19488845930400, 1203228609241,b1036*/ v=[ 1, 22, 3, 4, 5, 18, 16807, 32, 3, 50, 1, 12,161051, 14, 45]; z=[0,0,2,3,2,6,6,6,2,6,1,6,6,0,0]; n=6; pp=Mod(1203228609241,19488845930400);\\@LCM19488845930400-1203228609241-6
...
/* 14642258400, 2263785241,b2166*/ v=[ 1, 2, 3, 28, 5, 18, 1, 32, 363, 50, 16807, 12, 1, 2, 45]; z=[1,2,2,6,2,6,1,6,6,6,6,0,0,0,0]; n=6; pp=Mod(2263785241,14642258400);\\@LCM14642258400-2263785241-8
Желающие могут получить из него и сортированный по величине шага и начальному числу (не дают приложить 4-й файл) командой в консоли
sort /r patterns_sort_by_Hugo.txt >patterns_sort_by_Dmitriy.txt (
/r означает сортировку по убыванию)
Восстановить сортировку по номеру Hugo можно командой в консоли
sort /+45 patterns_sort_by_Dmitriy.txt >patterns_sort_by_Hugo.txtВложение:
patterns_Hugo.txt [59.06 Кб]
Скачиваний: 269
Вложение:
patterns_Dmitriy.txt [256.61 Кб]
Скачиваний: 271
Вложение:
patterns_sort_by_Hugo.txt [262.73 Кб]
Скачиваний: 271
-- 07.11.2022, 22:53 --Я Вам больше скажу, хозяин компа не стал вникать и попросту разделил весь список паттернов на 8 групп примерно по 130 в каждой.
Извращение, потоки с бОльшими номерами будут считать на порядки медленнее. Надо было перед делением на потоки хоть как-то перемешать список паттернов, например сортировкой начиная с 80 столбца командой
sort /+80 M12n11.pats >M12n11.pats.randomize.
А лучше разбросать строки по потокам подряд: 1 в 1, 2 в 2, ... 8 в 8, 9 в 1, 10 в 2, ... n в (n-1)%8+1.
-- 07.11.2022, 23:18 --Программа Hugo по моей оценке (хотите перепроверьте, это предложенный EUgeneUS паттерн b1850) затратит на такую проверку примерно 2800с (если будет перебирать по 3-у или 9-у месту, если по другому то в коде выше можно указать любое желаемое место). Почему в 9 раз дольше и так не быстрого PARI — это вопрос к Hugo.
Чтобы не говорили мол я специально завысил время программы Hugo в 100500 раз или у меня
страшно быстрый комп и потому его программа у меня будет работать в те же 100500 раз быстрее, запустил и её на тот же паттерн:
Код:
001 pcoul(12 11) -f11 -g3 -x9887353188984012120346 -b1850
305 3^2.5 2 13^2 2^2.3 7^2 2.5^2 3.11^2 2^5 571^2 2.3^2 5: 1991043 / 2101731 (7203.50s)
305 3^2.5 2 13^2 2^2.3 7^2 2.5^2 3.11^2 2^5 1159976219^2 2.3^2 5 (7803.79s)
305 3^2.5 2 13^2 2^2.3 7^2 2.5^2 3.11^2 2^5 5435345023^2 2.3^2 5 (9604.67s)
Смотрим на последние две строки, между ними прошло 1800с, за это время посчитаны простые от 1159976219 (это уже даёт шаг сильно больше порога) до 5435345023 или примерно 2.38e6/с, значит интервал от 15305342 до 6726727939 считался 2825с, практически совпадает с моей оценкой выше 2800с.
Вопрос встаёт во всю силу: почему код Hugo на C в 9 раз
медленнее не самого быстрого PARI? А ведь это мешает запускать второй и третий переборы на малые простые и получать ускорение.
-- 07.11.2022, 23:18 --Программа Hugo по моей оценке (хотите перепроверьте, это предложенный EUgeneUS паттерн b1850) затратит на такую проверку примерно 2800с (если будет перебирать по 3-у или 9-у месту, если по другому то в коде выше можно указать любое желаемое место). Почему в 9 раз дольше и так не быстрого PARI — это вопрос к Hugo.
Чтобы не говорили мол я специально завысил время программы Hugo в 100500 раз или у меня
страшно быстрый комп и потому его программа у меня будет работать в те же 100500 раз быстрее, запустил и её на тот же паттерн:
Код:
001 pcoul(12 11) -f11 -g3 -x9887353188984012120346 -b1850
305 3^2.5 2 13^2 2^2.3 7^2 2.5^2 3.11^2 2^5 571^2 2.3^2 5: 1991043 / 2101731 (7203.50s)
305 3^2.5 2 13^2 2^2.3 7^2 2.5^2 3.11^2 2^5 1159976219^2 2.3^2 5 (7803.79s)
305 3^2.5 2 13^2 2^2.3 7^2 2.5^2 3.11^2 2^5 5435345023^2 2.3^2 5 (9604.67s)
Смотрим на последние две строки, между ними прошло 1800с, за это время посчитаны простые от 1159976219 (это уже даёт шаг сильно больше порога) до 5435345023 или примерно 2.38e6/с, значит интервал от 15305342 до 6726727939 считался 2825с, практически совпадает с моей оценкой выше 2800с.
Вопрос встаёт во всю силу: почему код Hugo на C в 9 раз
медленнее не самого быстрого PARI? А ведь это мешает запускать второй и третий переборы на малые простые и получать ускорение.