А как же заниматься теорией, не зная основ
Ну вы что так и не видите, что люди говорят об одном и том же? Разве же обязательно каждый раз говорить КТО и ПСВ, чтобы понимать друг друга? Арифмост, система сравнений, система вычетов, запреты по модулям — это всё об одном и том же.
Меня учили делению с остатком во 2-м, кажется, классе. То же самое можно ведь сказать другими словами:
Не подходят числа, которые дают остаток 17 при делении на 37. То есть
Всё, внутренний цикл вообще не нужен, как и КТО.
Вот эта фраза же не означает, что не надо смотреть на запреты по модулям. Она говорит лишь о том, что можно это делать другим способом, быстрее.
Это называется определением "проходимости" кортежа данной структуры, т.е. может ли быть кортежей такой структуры бесконечное количество. А нас только такие кортежи и интересуют.
В принципе несложно программку на PARI написать по генерации таких паттернов: начинаем от центра и расставляем числа с шагом 6 симметрично, проверяем по остаткам. Вот, буквально на коленке:
Код:
? for(a=1,8, for(b=a+1,8, vv=[-b,-a,0,a,b]*6; forprime(p=5,13, if(#setminus(vector(p,i,i-1), Set(vv%p))==0, next(2))); print(vv); ));
[-24, -6, 0, 6, 24]
[-30, -6, 0, 6, 30]
[-36, -6, 0, 6, 36]
[-18, -12, 0, 12, 18]
[-30, -12, 0, 12, 30]
[-42, -12, 0, 12, 42]
[-48, -12, 0, 12, 48]
[-30, -18, 0, 18, 30]
[-42, -18, 0, 18, 42]
[-48, -18, 0, 18, 48]
[-30, -24, 0, 24, 30]
[-36, -24, 0, 24, 36]
[-36, -30, 0, 30, 36]
[-42, -30, 0, 30, 42]
[-48, -30, 0, 30, 48]
[-48, -42, 0, 42, 48]
И так далее. Простые проверять надо лишь до длины паттерна, не диаметра (впрочем можно и до диаметра, тут же всё быстро).
Если хочется паттерн в обычном виде, то печатаем не vv, а vv+vector(#vv,i,-vv[1]).
И не только проверка выполнена безо всякого упоминания ПСВ, но ещё и полный список подходящих кортежей до 100 выдаётся.