Вы объявили BigInteger p = BigInteger.valueOf(0);
как локальную переменную вне bigi_calc
? Потому что в этом случае область действия p
не распространяется на метод bigi_calc
.
Вы можете либо:
- Передача
p
в качестве третьего аргумента
- Сделать это полем для члена
Чтобы сделать первый вариант, вы должны сделать что-то вроде этого:
private BigInteger bigi_calc(long g1, long l, BigInteger p) { ... }
//...
BigInteger p = BigInteger.valueOf(0);
BigInteger u1 = obj.bigi_calc(g1, l, p);
Изучение кода дополнительно показывает, что он не имеет никакого смысла. Есть BigInteger.pow
, если это то, что вы пытаетесь вычислить. И использование BigInteger
для счетчика цикла, когда оно не превысит long
, является просто ненужным беспорядком.
Если pow(long base, long exp)
- то, что вы хотите, и по какой-то причине вам не разрешено использовать BigInteger.pow
, то вы можете написать это так:
static BigInteger pow(long base, long exp){
BigInteger result = BigInteger.ONE;
BigInteger biBase = BigInteger.valueOf(base);
for (long i = 0; i < exp; i++) {
result = result.multiply(biBase);
}
return result;
}