Алгоритм, который я сейчас использую, очень быстро приводит к очень большим числам. Шаг в алгоритме, который я должен выполнить, повышает 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