Единственная фактическая логическая ошибка, которую я вижу, - это строка:
if (b % n == 1)
, которая должна быть такой:
if (b % 2 == 1)
Но ваш общий дизайн проблематичен: ваша функция выполняет O (b) операции умножения и модуля, но использование b / 2
и a * a
подразумевает, что вы пытаетесь выполнить операции O (log b) (как правило, это выполняется модульное возведение в степень).