|
Последний раз редактировалось wrest 17.03.2026, 14:21, всего редактировалось 8 раз(а).
Пока суть да дело, написал детектор паттернов Он пытается определить паттерн (хотя я точного терминна не знаю, может и не паттерн) по по числу Код:
pat(base,chain_len,prime_lim,mode=0)={
\\ Детектор паттерна, т.е. какие простые множители, меньшие lim входят
\\ в разложение чисел вида n=base+d где d=0..len-1
\\ возвращает вектор длиной len состоящий из "постоянных" делителей паттерна
\\ вычисляем вектор делителей
my(v=vector(chain_len,i,1));
forprime(p=2,prime_lim,
for(d=0,chain_len-1,
my(bd=base+d); \\ анализируемое число в цепочке на позиции d, старт с d=0
while(bd%p==0,
v[d+1]*=p;bd=bd/p;
);
);
);
if(mode==1, \\ возвращаем результат в виде "стандартных" факторизаций
v=vector(chain_len,d,factor(v[d]));
);
if(mode==2, \\ возвращаем результат в виде вектора [[p1,a1],[p2,a2]],[[p1,a1],[p2,a2],[p3,a3]],...]
v=vector(chain_len,d,Vec(Col(factor(v[d]))));
);
if(mode==3, \\ возвращаем результат в виде вектора с множителями для количества делителей
v=vector(chain_len,d,numdiv(v[d]));
);
return(v);
}
Число n0 из которого будет извлекаться паттерн, берём отсюда: v=[63, 3610, 3179, 12, 17797, 3362, 75, 392, 841, 18, 2209, 20, 1587, 242, 6727, 96, 14045, 338, 243, 68, 35131]; n0=283938699868309713921641266159023371777169; m=229403502054304075118105309394590566946400; nu=[3, 2, 3, 3, 3, 3, 3, 2, 4, 3, 4, 3, 3, 3, 3, 2, 3, 3, 3, 3, 3]; Запуск:
- ? \r pat_detect.gp
- time = 1 ms.
- ? n0=283938699868309713921641266159023371777169;
- ? pat(n0,21,59)
- time = 1 ms.
- %4 = [63, 3610, 3179, 12, 17797, 3362, 75, 23128, 841, 18, 2209, 20, 1587, 242, 6727, 96, 14045, 338, 729, 68, 35131]
- ? pat(n0,21,59,1)
- time = 1 ms.
- %5 = [[3, 2; 7, 1], [2, 1; 5, 1; 19, 2], [11, 1; 17, 2], [2, 2; 3, 1], [13, 1; 37, 2], [2, 1; 41, 2], [3, 1; 5, 2], [2, 3; 7, 2; 59, 1], Mat([29, 2]), [2, 1; 3, 2], Mat([47, 2]), [2, 2; 5, 1], [3, 1; 23, 2], [2, 1; 11, 2], [7, 1; 31, 2], [2, 5; 3, 1], [5, 1; 53, 2], [2, 1; 13, 2], Mat([3, 6]), [2, 2; 17, 1], [19, 1; 43, 2]]
- ? pat(n0,21,59,2)
- time = 3 ms.
- %6 = [[[3, 2], [7, 1]], [[2, 1], [5, 1], [19, 2]], [[11, 1], [17, 2]], [[2, 2], [3, 1]], [[13, 1], [37, 2]], [[2, 1], [41, 2]], [[3, 1], [5, 2]], [[2, 3], [7, 2], [59, 1]], [[29, 2]], [[2, 1], [3, 2]], [[47, 2]], [[2, 2], [5, 1]], [[3, 1], [23, 2]], [[2, 1], [11, 2]], [[7, 1], [31, 2]], [[2, 5], [3, 1]], [[5, 1], [53, 2]], [[2, 1], [13, 2]], [[3, 6]], [[2, 2], [17, 1]], [[19, 1], [43, 2]]]
- ? pat(n0,21,59,3)
- time = 3 ms.
- %7 = [6, 12, 6, 6, 6, 6, 6, 24, 3, 6, 3, 6, 6, 6, 6, 12, 6, 6, 7, 6, 6]
- ?
Это чтобы в функцию которая цепочки фильтрует (в моём авторстве называется em3(), на 29 странице темы post1711836.html#p1711836 ), не передавать параметры, можно передать только n0 На всякий случай написал так что возвращаться может в разных форматах. Но есть и проблемы, похоже. Например, у числа n0+17 предполагается "встроенный множитель"  а в реальности там есть  Говорилось где-то в теме, что проверять надо на наличие простых множителей начиная с 59, а тут выходит, что в числе n0+17 имеем (после деления на 3^5) простой делитель 3.
|