Хорхе писал(а):
Гугл рулит.
Судя по найденным результатам, простого алгоритма нет.
Посмотрел, как считается invphi в Maple. В принципе алгоритм не сложный.
По крайней мере, короткий
Код:
proc (a) local d, divlist, i, j;
if not type(a,'posint') then return ('procname')(args) end if;
d := ifactors(a)[2];
divlist := sort(map(convert,combinat:-powerset([seq(seq(op(1,d[j]),i = 1 .. op(2,d[j])),j = 1 .. nops(d))]),'`*`'));
divlist := select(type,divlist,'even');
divlist := select(x -> isprime(x+1),divlist); remove(has,sort(map(convert,invrec(a,divlist),'`*`')),FAIL)
end proc