2014 dxdy logo

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

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




Начать новую тему Ответить на тему На страницу Пред.  1 ... 21, 22, 23, 24, 25, 26, 27 ... 29  След.
 
 Re: Симметричные кортежи из последовательных простых чисел
Сообщение13.01.2024, 19:55 
Заслуженный участник


20/08/14
11211
Россия, Москва
Yadryara в сообщении #1625516 писал(а):
Здесь многократно обсуждалось, что надо брать минимум 37#. И уже одно это может дать 40-кратное ускорение.
Решил проверить в реальных условиях на PARI.
Взял паттерн 19-252, интервал длиной 41#=3e14 начиная с точки 59#=1.9e21, вот что получилось для разных размеров таблиц (привожу два времени: на инициализацию таблицы и потом на счёт интервала по ней):
Код:
n19: 2..19: 384/9699690=1:25260, time: 0.0с + 9102с
n19: 2..23: 2304/223092870=1:96829, time: 0.0с + 2395с (ускорение 3.8)
n19: 2..29: 27648/6469693230=1:234002, time: 0.1с + 985с (ускорение 9.24)
n19: 2..31: 331776/200560490130=1:604506, time: 1.2с + 440с (ускорение 20.7)
n19: 2..37: 6635520/7420738134810=1:1118336, time: 25.3с + 241с (ускорение 37.8)
n19: 2..41: 159252480/304250263527210=1:1910490, time: 674с + 144с (ускорение 63.2)
Как видно, ускорения 1118336/25260=44.27 раза не получилось. Собственно скорость снизилась от расчётной уже для 31# с размером таблицы 331776, думаю это связано с размером кэша L2 процессора, 27648 элементов в него ещё влезают, а 331776 уже нет. И продолжила по чуть-чуть снижаться и для 37# и для 41#, в итоге став всего 63.2х вместо расчётных 75.6х.

Кстати вот и реальная скорость поиска паттерна 19-252 на PARI: 3.0425e14/144*3600=7.6e15 в час.
Моя же программа на асм+AVX2 в тех же условиях (тоже с таблицей 41#) перебирает со скоростью 3.8e18 в час, в 500 раз быстрее. А с таблицей 47# и 9.1e18/ч, в 1200 раз быстрее. Вот такой PARI тормозной.

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


29/04/13
7262
Богородский
Dmitriy40 в сообщении #1625795 писал(а):
Как видно, ускорения 1118336/25260=44.27 раза не получилось.

Не зря я на всякий случай написал ускорение в 40 раз, а не в 44 раза, хотя расчёт дающий 44 привёл. Ваш результат с примерно 38-кратным ускорением весьма хорош.

Так что у меня ещё один вопрос к ice00.

Что мешает поправить программу и считать в 38 раз быстрее? Зачем продолжать тестировать карету с конной тягой, вместо того чтобы на самолёте лететь ??

So I have one more question for ice00.

What's stopping you from correcting the program and counting 38 times faster? Why continue testing a horse-drawn carriage instead of flying an airplane ??

Dmitriy40 в сообщении #1625795 писал(а):
Вот такой PARI тормозной.

Это потому что PARI — интерпретатор, как и Бэйсик?

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


29/04/13
7262
Богородский
Dmitriy40 в сообщении #1625795 писал(а):
Моя же программа на асм+AVX2 в тех же условиях (тоже с таблицей 41#) перебирает со скоростью 3.8e18 в час, в 500 раз быстрее. А с таблицей 47# и 9.1e18/ч, в 1200 раз быстрее.

Dmitriy40 я давно планировал начать изучать Асм и всё ленился. У Вас случайно нет желания открыть тему с примерным названием "Асм для чайников и кофейников"? :-)

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


20/08/14
11211
Россия, Москва
Yadryara в сообщении #1625848 писал(а):
Dmitriy40 в сообщении #1625795 писал(а):
Вот такой PARI тормозной.
Это потому что PARI — интерпретатор, как и Бэйсик?
В основном да. Но не только.
Кажется wrest неоднократно показывал что если воспользоваться механизмом gp2c и скомпилить программу на PARI в С-ый код, то потом получается программа в сотню раз быстрее. Скорости асм+AVX2 конечно не достигается (это вообще надо сильно постараться), но скорости неплохой программы на С вполне.
Из-за интерпретации не только медленно, но ещё и "ломаются" (не работают или дают противоположный результат, т.е. ухудшают вместо улучшения) многие известные техники ускорения программ, я несколько раз об этом говорил и приводил примеры. Например у меня не получилось поднять скорость с 63.2 раза до теоретических 75.6 раз, хотя я точно знаю как это сделать и как оно должно было сработать (обрабатывать большие таблицы небольшими кусочками), но реально получилось незначительное замедление (до 62 раз где-то) вместо ускорения. Потому что в циклах стало больше команд PARI и они стали больше раз выполняться (и декодироваться), и это съело весь выигрыш от оптимизации обращений в память.
Почему "не только". PARI по моему в принципе не оптимизировался под скорость вычислений, упор сделан на удобство и универсальность вычислений. Особенно сложных. Например проверка чисел на простоту, интегрирование, вычисление всяких интересных функций и так далее. Видимо поэтому нет нормальной работы со строками (только с массивами символов), чтения даже текстовых файлов (только или построчно, или целиком в вектор), выделения памяти под сложные или очень простые структуры данных (я не смог выделить большой массив байтов, никак, или многомерных массивов кроме как массива массивов). Про кривизну реализации многопоточности тоже уже говорил. Зато удобно и понятно.

(Про асм)

Yadryara в сообщении #1625850 писал(а):
У Вас случайно нет желания открыть тему с примерным названием "Асм для чайников и кофейников"? :-)
По типу имеющейся про PARI? Нет, желания не было. Впрочем если у народа (пусть даже в Вашем лице) будет желание позадавать вопросы в такой теме, то готов её завести и поотвечать. Но превращать её в цикл лекций по обучению - не готов. Потому что считаю что асм настолько отличается от привычного мира, даже от C или PARI, что объяснять надо буквально с азов (школьной программы если у кого в школе всё же была информатика). И эти вот азы у каждого свои, уровень понимания, и он даже не линейный, а скорее фрагментами (кто-то знает много, но некоторые базовые вещи нет, и наоборот). А мне многие и многие вещи уже давно настолько очевидны, что просто не понимаю как их можно не знать или не понимать. Я даже помню как сам кое-что простое в упор не понимал годами, но что-то другое мне и в голову не приходит что это малопонятно. Приведу аналогию с математичкой: кто-то знает арифметику, но не уравнения; кто-то знает уравнения, но не признаки делимости; кто-то знает логарифмы, но не квадратные уравнения (да, есть и такие!); кто-то умеет интегрировать, но не понимает тригонометрию; а кто-то понимает тригонометрию, но не логарифмы; и так далее в самых разных комбинациях, которые я даже в страшном сне представить не смогу. И это не голословные заявления: я нескольким людям помогал разобраться и с С и с асмом и видел всё это вживую. А уж сколько раз сам попадал в идиотскую ситуацию с техподдержкой, когда исключил уже казалось все возможные причины сбоев чего-то там, вплоть до квантовых флуктуаций и космического фона (да-да, и такое бывало проверялось!), а потом спустя недели разбирательств оказывается просто забыли вставить провод!! :facepalm: Ну ка-а-а-а-к можно было это не проверить первым делом за столько времени?!?! А я просто не подумал (не мог представить) что столь очевидную ведь могли пропустить и выдумывал и заставлял проверять более сложные причины.

Ещё, асм требует очень логического (формализованного) мышления, сильнее чем для С или PARI. В этом смысле математикам проще, они привыкли к формализму и им в общем всё равно какой именно. Тут просто другой. Например есть лишь 7-15 переменных (регистров) с которыми можно делать очень простые действия, а если надо больше переменных - то будь добр прочитать (и записать обратно) из файла на диске (грубая аналогия). И тип переменных строго ограничен и простой: только небольшие целые числа или только с плавающей точкой фиксированной точности. Или короткие вектора из ник (MMX, SSE, AVX). И если число не влезает в регистр (например более 5млрд в 32-битной архитектуре), то придётся его хранить в двух (трёх и т.д.) регистрах и уже не получится их просто так сложить/вычесть или сравнить друг с другом - придётся самому писать в деталях как именно это надо делать. А ещё половина этих переменных/регистров имеют спецназначение и например умножение нельзя сделать над произвольными регистрами, а только над первым и любым другим и результат будет не где захотите, а строго в первых двух (утрирую, но не сильно). И попытка написать хоть сколько нибудь сложный код (что-то посчитать) выливается в попытку вычислить интеграл от синуса от чего-нибудь несложного через четыре действия арифметики (опять же утрирую, но снова не столь уж сильно). Да, можно, да, в принципе известно как (хотя путь от принципа до реального алгоритма вычисления очень неблизок), да, кто-то когда-то это уже делал и даже выложил свой код (обычно кстати весьма кривой и вам в конкретную задачу ну совсем не подходящий и надо переписывать под свои условия если не хотите сильно потерять в скорости счёта) и можно не париться и взять готовое - но это всё намного муторнее (кому-то зато и интереснее!) чем на языках высокого уровня. И на асме нет такого понятия как "компилятор умный, он сам всё сделает". Нет, он в этом смысле тупой! И сделает ровно и только то что вы ему прикажете, ни на йоту больше. И многих (например меня) именно это и привлекает, полный контроль над происходящим.

И отдельной большой проблемой стоит оптимизация. По скорости, по памяти, по количеству обращений к файлам (и памяти). Написать абы какой код несложно, достаточно пары недель занятий (обычно на изучение тех самых 4 арифметических действий что умеет проц и на привычку раскладывать сложную операцию типа проверки простоты на много-много простейших действий) и он будет работать, но вот когда захочется чтобы он работал не абы как, а быстро - вот тут придётся помучиться в разы больше. И почитать намного больше, и тупо придумывать раз за разом новый принцип вычисления и проверять быстрее он или медленнее, причём часто на конкретной аппаратуре, не где-то там на воображаемых идеальных проце, компе и винде, а вот конкретно у себя на компе в это время суток (а винда любит подсуропить и начать шебуршиться в самый неподходящий момент) при таких запущенных программах и так далее. Подчеркну, не просто переписать код по другому (хотя и этого хватает), а реально придумать как например факториал посчитать ну совсем-совсем по другому, не как привычно и понятно. Да даже тривиальное казалось бы умножение, а есть ведь быстрые методы, ну какому нормальному человеку придёт в голову для перемножения двух чисел использовать фурье разложение?! Его ещё далеко не каждый понимает (скажем я почти нет) или даже вообще знает что оно есть. А так иногда оказывается быстрее. Это конечно не исключительно про асм, но там таких трюков море, намного больше чем на нормальных языках. И иногда такие трюки могут дать ускорение в десятки раз! Даже когда казалось бы выжато всё возможное и дальше некуда - вдруг приходит новая идея (совершенно казалось бы не подходящая и вообще "из другой оперы", как с фурье для умножения), приходится переписать весьма значительную часть кода, зато оно вдруг раз и работает заметно быстрее. Короче написать быструю программу в разы сложнее чем написать хоть какую-то правильно работающую, тут пары недель не хватит, могут и годы уйти на в основном придумывание (ну или узнавания из книжек и гитхаба) разных трюков.

Вопросов надёжности вычислений или многопоточности касаться не буду, это ещё два айсберга не меньше оптимизации, не столь сложные в коде, но сильно не интуитивные (сказал бы как квантовая механика, но физики обидятся) и проблема скорее не в умении так писать код, а в ломке собственных навыков (причём как раз наработанных выше, при изучении асма и попыток оптимизации программ) чтобы писать код именно так, а не как кажется более правильным, чтобы правильным стало казаться вот так.

В итоге дублировать множество имеющихся книжек и лекций и видосиков типа "асм для чайников" не вижу ни смысла, ни терпения мне не хватит объяснять последовательно и понятно много базовых (и самоочевидных для меня) вещей. А вот объяснить непонятные моменты, конкретные вопросы - это запросто. Собственно как и с физикой или математикой: никто же не открывает тему "КМ для чайников" или "Топология для чайников" (хотя книги и видосики такие точно есть), все отсылают к учебникам (и видосикам) и лишь помогают в их изучении. Да и тема про PARI выродилась в это же, ответы на вопросы, лекции давно закончились, хотя и сильно помогли на самом начальном этапе (но для асма они и так уже много где есть).
Но так как у меня собственно нет законченного образования по программированию, то я даже учебников и курсов порекомендовать не могу - когда изучал сам, то это было сумбурно и по десяткам старых книжек (и не учебников), часто совсем не о том (я шёл не от С или PARI к асму, а от схем на релюшках (кто ещё помнит как они работают?!) и транзисторах и процессоров и их команд к асму, т.е. совсем с другой стороны).
Но помочь разобраться методом ответов на вопросы и разъяснений непонятных моментов - легко.

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


29/04/13
7262
Богородский
Dmitriy40 в сообщении #1625871 писал(а):
Впрочем если у народа (пусть даже в Вашем лице) будет желание позадавать вопросы в такой теме, то готов её завести и поотвечать.

О, так Вы уже и введение написали! Остаётся только дождаться темы "Асм. Великий и ужасный." :-)

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


20/08/14
11211
Россия, Москва

(Тема про асм)

Только не забудьте что это моё личное мнение и оно вполне может быть далёким от правды или предвзятым (не лично к Вам, а к асму). Мало ли какие лично у меня заморочки с асмом и прочим, кто-то другой может считать совсем иначе (например mihaild или GAA). Плюс я предпочитаю не столь широко известный FASM (Вы с ним уже на "ты"), в причины вдаваться не буду, из них лишь малая часть объективны.
А тему типа "Глупые ответы по асму"(с)Антон_Пеплов ;-) завести готов. Глупые именно ответы, не вопросы - как бы не претендую на гуру в асме, но что знаю поделюсь. Если соберётесь с духом/силами. Или может опрос замутить интересно ли это кому-то ещё? Тут-то никто не увидит. Хм, а мысль ...
В принципе какое-то введение могу попытаться написать. Как только не свалиться в технические тонкости при этом ... ведь они самое интересное (мне).

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


29/04/13
7262
Богородский
Dmitriy40 в сообщении #1625998 писал(а):
И BringAI и кэфы и так есть где обсудить.

Имеете в виду что с кэфами нужно вернуться сюда?

Но придут ли сюда talash и worm2 ?

talash в сообщении #1626011 писал(а):
Я тоже в теории чисел мало понимаю.

Я тоже. Для меня до сих пор КТО это чёрный ящик. Спрашиваю у PARI: "Кто? Какие числа по арифмосту подходят?" — отвечает. А как это вычисляется — не знаю.

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


20/08/14
11211
Россия, Москва
Думаете я знаю как КТО вычисляет и почему? Нет, постоянно лезу как минимум в вики, благо там достаточно понятно (с пятого раза, когда уже вроде разобрался, но не запомнил ;-)). И это даже при том что я её много где применяю! И кстати быстрый расчёт КТО это одна из тех идей что всё пытаюсь применить в свою программу, но никак не получается, а она ещё дала бы выигрыш до 4-х раз на задаче 19-252, с уменьшением требуемой памяти. Но вот никак не получается считать её достаточно быстро.

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


29/04/13
7262
Богородский
На всякий случай скажу, что я старые подсчёты не бросил. 6-пары, тройки 6-6 и пятёрки 24-6-6-24 по-прежнему считаю.

Yadryara в сообщении #1624355 писал(а):
И пока удалось аппроксимировать только тройки. Показатель степени соотв. полинома 1.92. Думаю, что на самом деле конечно квадрат, то есть кэфы при тройках (С3) аппроксимируются параболой. $C3(0-1\cdot10^{25}) \approx 610$
Другими словами, на каждые 610 простых чисел приходится лишь одна центральная 3-ка. А на каждые 700-800 центральных 3-к — лишь одна центральная 5-ка.

Нету там квадрата. Надёжно на $605$ простых чисел приходится лишь одна 3-ка 6-6. 13 млн троек найдено.
И на каждые $837$ 3-к 6-6 — лишь одна центральная 5-ка 24-6-6-24.

Yadryara в сообщении #1624355 писал(а):
с С5 всё-таки происходит расколбас и непонятно, что там за формула. Надо ещё больше статистики собрать. Десять тысяч 5-к всё равно мало.

Я имел в виду, что раз 10 тысяч мало, то надо 100 тысяч брать. Пока что 16 тысяч набрал.

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


29/04/13
7262
Богородский
Yadryara в сообщении #1625516 писал(а):
Здесь многократно обсуждалось, что надо брать минимум 37#.

А может стоило обсудить арифмост этой задачи 8 лет назад, в начале темы? Начать с азов, а то не всем понятно.

Ребёнку выдали 25 кубиков. На одной из граней каждого кубика было написано уникальное простое число меньшее 100.

— Попробуй сложить цепочку из 5 кубиков. Такую, чтоб второе число было больше 1-го на 24, третье число было больше 2-го на 6, четвёртое число было больше 3-го тоже на 6, а пятое число было больше 4-го снова на 24.

Допустим, смышлёный малыш начал действовать методично, перебирая кубики по возрастанию чисел. И вот что у него получилось:

$\tikz[scale=.08]{
\fill[green!90!blue!50] (0,190) rectangle (50,200);
\fill[green!90!blue!50] (0,140) rectangle (50,150);
\fill[green!90!blue!50] (0,110) rectangle (50,120);
\draw[step=10cm] (0,110) grid +(50,120);
\node at (5,225){\text{2}};
\node at (5,215){\text{3}};
\node at (5,205){\text{5}};
\node at (15,205){\text{29}};
\node at (5,195){\text{7}};
\node at (15,195){\text{31}};
\node at (25,195){\text{37}};
\node at (35,195){\text{43}};
\node at (45,195){\text{67}};
\node at (5,185){\text{11}};
\node at (5,175){\text{13}};
\node at (15,175){\text{37}};
\node at (25,175){\text{43}};
\node at (5,165){\text{17}};
\node at (15,165){\text{41}};
\node at (25,165){\text{47}};
\node at (35,165){\text{53}};
\node at (5,155){\text{19}};
\node at (15,155){\text{43}};
\node at (5,145){\text{23}};
\node at (15,145){\text{47}};
\node at (25,145){\text{53}};
\node at (35,145){\text{59}};
\node at (45,145){\text{83}};
\node at (5,135){\text{29}};
\node at (15,135){\text{53}};
\node at (25,135){\text{59}};
\node at (5,125){\text{31}};
\node at (5,115){\text{37}};
\node at (15,115){\text{61}};
\node at (25,115){\text{67}};
\node at (35,115){\text{73}};
\node at (45,115){\text{97}};
}$

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


29/04/13
7262
Богородский
— Надо же! — удивился взрослый. — Существует $\binom{25}5= 53130$ способов выбрать 5 кубиков из 25 и всего лишь 3 набора подходят. А вдруг понадобится искать такие наборы среди бо́льших чисел? Нет ли способа ускорить поиск, не перебирая все кубики с номером меньше определённого в качестве кандидата на первую позицию?

Очевидно, что любое число кратное простому (кроме самого этого простого) не годится. То есть остаток от деления кандидата на простое в общем случае должен быть больше нуля. А все ли другие остатки годятся? Да, для простых чисел 2 и 3, все. А для 5?

В таблице сразу бросается в глаза, что для кандидатов 11 и 31 уже второе подходящее число найти невозможно — при добавлении 24 оно будет кратно 5. А для кандидата 71? То же самое. Да любое число, заканчивающееся на 1-ку, не годится. А ведь все такие числа дают остаток 1 при делении на 5. Остаток 1 при делении на 5 ещё дают числа, заканчивающееся на 6-ку и больше никакие. Все они чётные и не годятся. Стало быть 1 — тоже запрещённый остаток по простому модулю 5.

Проведя аналогичные рассуждения для кандидатов в первое число, дающих остаток 4 при делении на 5, увидим, что и этот остаток невозможен. Четвёртое подходящее число найти невозможно — при добавлении 36 к кандидату оно будет кратно 5.

Имеем такой список разрешённых остатков по модулям 2, 3 и 5.

2 : 1
3 : 1, 2
5 : 2, 3

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


29/04/13
7262
Богородский
А надо ли останавливаться на модуле 5? Нет конечно, ведь даже в этой детской задаче с числами до 100 есть числа не меньше $7^2$.

Второе, 3-е, 4-е и 5-е числа больше начального соответственно на 24, 30, 36 и 60. Посмотрим на ближайшие к ним сверху числа кратные 7 и вычитанием определим запрещённый остаток:

$28-24=4$

$35-30=5$

$42-36=6$

$63-60=3$

Добавились 4 новых запрещённых остатка.

Список разрешённых остатков для начального числа цепочки по модулям 2, 3, 5 и 7.

2 : 1
3 : 1, 2
5 : 2, 3
7 : 1, 2

Надеюсь теперь-то понятно, что для гораздо бо́льших чисел для уменьшения перебора надо вычислять запрещённые остатки для всё бо́льших простых модулей.

Но остановимся пока на 7-ке. А можно ли без обращения к КТО самим определить кандидатов в начальное число цепочки? Да, конечно. Вручную можно подобрать, например.

С чего начнём? С самого узкого места, с модуля 7. Подходят всего 2 остатка из 7. То есть потенциально годятся только 10 чисел из первых 35.

$ 1, 2, 8, 9, 15, 16, 22, 23, 29, 30 $

Теперь посмотрим на остатки для этих чисел по модулю 5:

$ 1, 2, 3, 4, 0, 1, 2, 3, 4, 0 $

Теперь потенциально годятся только 4 числа из первых 35.

$ 2, 8, 22, 23 $

Надеюсь, не надо объяснять почему в каждой следующей 35-ке тоже будут только 4 потенциально годных числа, дающих именно такие остатки по модулю 35.

Всего 12 потенциально годных чисел из 105.

$ 2, 8, 22, 23, 37, 43, 57, 58, 72, 78, 92, 93 $

Теперь посмотрим на остатки для этих чисел по модулю 3:

$ 2, 2, 1, 2, 1, 1, 0, 1, 0, 0, 2, 0 $

Теперь потенциально годятся только 8 чисел из первых 105.

$ 2, 8, 22, 23, 37, 43, 58, 92 $

Надеюсь, не надо объяснять почему в каждой следующей 105-ке тоже будут только 8 потенциально годных чисел, дающих именно такие остатки по модулю 105.

Всего 16 потенциально годных чисел из 210.

$ 2, 8, 22, 23, 37, 43, 58, 92, 107, 113, 127, 128, 142, 148, 163, 197 $

Теперь посмотрим на остатки для этих чисел по модулю 2. Или, что то же самое, посмотрим на чётные числа и сразу выкинем их:

$ 23, 37, 43, 107, 113, 127, 163, 197 $

Всего 8 потенциально годных чисел из 210.

Засим ручная проверка по КТО закончена. Надеюсь, не надо объяснять почему в каждой следующей 210-ке тоже будут только 8 потенциально годных чисел, дающих именно такие остатки по модулю 210. $210=2\cdot3\cdot5\cdot7=7\#$

Теперь можно перебирать кандидатов с кэфом примерно 1 к 26. А можно перейти к следующему периоду. При переходе к 11# правая часть кэфа неминуемо вырастет и будет также неминуемо расти при следующих переходах.

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


20/08/14
11211
Россия, Москва
Yadryara в сообщении #1626905 писал(а):
А можно ли без обращения к КТО самим определить кандидатов в начальное число цепочки? Да, конечно.
Замечу что без КТО Вам пришлось проверить по двум модулям 10 чисел вместо 4 с КТО, по трём модулям 22 числа вместо 8 с КТО, по четырём модулям 38 чисел вместо тех же 8 с КТО (но тут уж так (не)повезло с чётными). Почти в пять раз больше. А с КТО понадобится 4 раза вычислить обратный элемент по модулю (можно посчитать один раз в PARI и потом просто пользоваться везде в программах, ведь они получаются только из самих простых модулей, а от остатков и соответственно паттерна не зависят) и потом сделать 16 умножений и 8 делений сложения/вычитания не считаю), вместо 38 делений (или 22 если чётные отбрасывать без делений). Руками пожалуй да, без КТО проще и понятнее (особенно если подробно расписать как всё же увеличиваете количество чисел при добавлении нового модуля n, что там просто переписываются предыдущие n чисел с добавлением старого модуля).

Для меня в этом способе самое приятное то, что вот этот процесс перехода/учёта нового модуля вполне позволяет переходить от остатков старых чисел по любому простому (и их вектору) к остаткам по тому же простому (или вектору) новых чисел без команд умножения и тем более деления. Т.е. можно применить любимый SSE/AVX2 и лишь немногим дольше кроме самих этих 8-ми чисел получить ещё и 160 остатков каждого из них по 20 небольшим простым. Что очень и очень нужно в моей программе для ускорения перебора (и пока такое совмещение не реализовано).

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


29/04/13
7262
Богородский
Dmitriy40 в сообщении #1626928 писал(а):
А с КТО понадобится 4 раза вычислить обратный элемент по модулю (можно посчитать один раз в PARI и потом просто пользоваться везде в программах, ведь они получаются только из самих простых модулей,

Обратный элемент числа $2$ по модулю $3$ равен $2$.
Обратный элемент числа $2$ по модулю $5$ равен $3$.
Обратный элемент числа $2$ по модулю $7$ равен $4$.

Обратный элемент числа $3$ по модулю $5$ равен $2$.
Обратный элемент числа $3$ по модулю $7$ равен $5$.

Обратный элемент числа $5$ по модулю $7$ равен $3$.

Здесь 6 значений.

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


29/04/13
7262
Богородский
Кажись понял.

Yadryara в сообщении #1626905 писал(а):
То есть потенциально годятся только 10 чисел из первых 35.

$ 1, 2, 8, 9, 15, 16, 22, 23, 29, 30 $

Теперь посмотрим на остатки для этих чисел по модулю 5:

$ 1, 2, 3, 4, 0, 1, 2, 3, 4, 0 $

Теперь потенциально годятся только 4 числа из первых 35.

$ 2, 8, 22, 23 $

Вместо того, чтобы делить 10 раз на 5 можно 10 раз умножить на 3 и по остаткам из таблицы умножения по модулю 5 как раз и определить, что годятся только 4 числа: $ 2, 8, 22, 23 $.

 Профиль  
                  
Показать сообщения за:  Поле сортировки  
Начать новую тему Ответить на тему  [ Сообщений: 431 ]  На страницу Пред.  1 ... 21, 22, 23, 24, 25, 26, 27 ... 29  След.

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



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

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


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

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