Вот вопрос возник - существует ли готовый код аналога polrootsmod для составного модуля?
Обычно в таких случаях ищутся корни по модулю каждого из простых степеней в разложении составного модуля, а затем комбинируются по китайской теореме об остатках.
Если конкретно, то меня интересует решение сравнения

по составному модулю

.
Для этого у меня есть процедурка:
Код:
\\ all square roots of x modulo odd m
{ asqrtmod(x, m) = my(p, r, t, l);
r=[];
if(!issquare(Mod(x,m)),return(r));
p=factorint(m);
t=[];
l=matsize(p)[1];
for(i=1,l,
t = concat(t,[Mod(sqrt(x + O(p[i,1]^p[i,2])),p[i,1]^p[i,2])]);
);
forvec(s=vector(l,i,[0,1]),
r=concat(r,[lift(chinese(vector(l,i,t[i]*(-1)^s[i])))])
);
vecsort(r)
}