A double
не обладает достаточной точностью, чтобы вместить все цифры Math.pow(51,43)
.Поэтому, когда вы берете mod 77
, ответ подвержен значительным ошибкам округления.
Я предлагаю использовать BigInteger
для целочисленной арифметики произвольной точности.