Я работаю над калькулятором, который вычисляет число только для другого числа. Это происходит с этим кодом:Вычислить мощность с помощью многопотоков
public BigInteger generate(long Power, long Base){
BigInteger result = BigInteger.valueOf(Base),
a = BigInteger.valueOf(Base);
int j=0;
while(j!=Power-1){
result = result.multiply(a);
j++;
}
return result;
}
Я хотел бы знать, есть ли какой-либо математический способ разделить этот тип вычисления в несколько потоков, так что моя программа будет вычислять такие вещи, как 987654321^987654321 гораздо быстрее. Мой процессор имеет 6 ядер, поэтому, если есть способ использовать их все сразу для этого, это было бы здорово.
Без потоков: вы должны начать с преобразования a^b в (a^(b div 2))^2 * a^(b mod 2), если b достаточно велико. –
Я бы начал использовать лучший алгоритм для возведения в степень одного потока, например [возведение в степень по квадрату] (http://en.wikipedia.org/wiki/Exponentiation_by_squaring) –