Мне нужно оптимизировать код, в котором я умножаю вектор целых чисел (32 бита) на скаляр по модулю p (где p - простое число (2 ^ 32) -5), а затем вычитаю этот вектор из другой вектор по модулю p.
Код выглядит следующим образом:
public static void multiplyAndSubtract(long fragmentCoefficient, long[] equationToSubtractFrom, long[] equationToSubtract) {
for (int i = 0; i < equationToSubtractFrom.length; i++) {
equationToSubtractFrom[i] = modP(equationToSubtractFrom[i] - multiplyModP(fragmentCoefficient, equationToSubtract[i]));
}
}
Я использую длинные числа, потому что Java не поддерживает целые числа без знака, но оба вектора имеют mod p, поэтому вы можете ожидать, что каждое число будет 0 <= x <(2 ^ 32) - 5
Есть идеи по оптимизации? Операция mod p - это то, что занимает большую часть времени выполнения, поэтому один из способов ее оптимизации может как-то не выполнять modP после умножения, а делать это только после вычитания. Есть идеи, как это сделать?