Быстрее ли вычислять возведение целых чисел в степень с помощью двоичных или троичных фрагментов?JAVA

Программисты JAVA общаются здесь
Anonymous
Быстрее ли вычислять возведение целых чисел в степень с помощью двоичных или троичных фрагментов?

Сообщение Anonymous »

Код 1
В первом коде мы используем двоичное возведение в степень.
public class Solution {
public int pow(int A, int B, int C) {
if (C == 1) return 0;
long base = (A % C + C) % C;
return (int) modPow3(base, B, C);
}
private long modPow3(long A, int B, int C) {
if (B == 0) return 1;
long part = modPow3(A, B / 2, C);
long ans = part;
ans = (ans * part) % C;
if(B % 2 == 1) {
ans = (ans * A) % C;
}
return (int)ans;
}

}

Код 2
Во втором коде мы используем троичное возведение в степень. Хотя это уменьшает количество рекурсивных уровней, поскольку показатель степени делится на 3.
public class Solution {
public int pow(int A, int B, int C) {
if (C == 1) return 0;
long base = (A % C + C) % C;
return (int) modPow3(base, B, C);
}
private long modPow3(long A, int B, int C) {
if (B == 0) return 1;
long part = modPow3(A, B / 3, C);
long ans = part;
ans = (ans * part) % C;
ans = (ans * part) % C;
if(B % 3 == 1) {
ans = (ans * A) % C;
}
else if(B % 3 == 2) {
ans = (ans * A) % C;
ans = (ans * A) % C;
}
return (int)ans;
}
}


Подробнее здесь: https://stackoverflow.com/questions/798 ... ary-chunks

Вернуться в «JAVA»