Быстрее ли вычислять возведение целых чисел в степень с помощью двоичных или троичных фрагментов?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
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

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