Алгоритм, который я сейчас использую, очень быстро набирает очень большие числа. Шаг в алгоритме, который мне нужен, поднимает x к результату функции totient, примененной к y . В результате вы можете столкнуться с очень большими числами.
Например. При расчете мультипликативного порядка из 10 по модулю 53:
10^totient(53) == 10^52 == 1 * 10^52
Следующий алгоритм работает немного лучше с точки зрения избежания больших чисел, но все равно не работает, когда 10 ^ mOrder больше емкости типа данных:
mOrder = 1
while 10^mOrder % 53 != 1
if mOrder >= i
mOrder = 0;
break
else
mOrder = mOrder + 1