public FieldElement negate() { return f.getQ().subtract(this); }
public FieldElement pow(FieldElement e){ return modPow(e, f.getQ()); }
@Override public FieldElement addOne() { return new BigIntegerFieldElement(f, bi.add(BigInteger.ONE)).mod(f.getQ()); }
@Override public FieldElement subtractOne() { return new BigIntegerFieldElement(f, bi.subtract(BigInteger.ONE)).mod(f.getQ()); }
public FieldElement add(FieldElement val) { return new BigIntegerFieldElement(f, bi.add(((BigIntegerFieldElement)val).bi)).mod(f.getQ()); }
public FieldElement subtract(FieldElement val) { return new BigIntegerFieldElement(f, bi.subtract(((BigIntegerFieldElement)val).bi)).mod(f.getQ()); }
public FieldElement divide(BigInteger val) { return new BigIntegerFieldElement(f, bi.divide(val)).mod(f.getQ()); }
public FieldElement multiply(FieldElement val) { return new BigIntegerFieldElement(f, bi.multiply(((BigIntegerFieldElement)val).bi)).mod(f.getQ()); }
public FieldElement invert() { // Euler's theorem //return modPow(f.getQm2(), f.getQ()); return new BigIntegerFieldElement(f, bi.modInverse(((BigIntegerFieldElement)f.getQ()).bi)); }
public FieldElement pow(FieldElement e){ return modPow(e, f.getQ()); }
public FieldElement negate() { return f.getQ().subtract(this); }
@Override public FieldElement addOne() { return new BigIntegerFieldElement(f, bi.add(BigInteger.ONE)).mod(f.getQ()); }
@Override public FieldElement subtractOne() { return new BigIntegerFieldElement(f, bi.subtract(BigInteger.ONE)).mod(f.getQ()); }
public FieldElement divide(BigInteger val) { return new BigIntegerFieldElement(f, bi.divide(val)).mod(f.getQ()); }
public FieldElement add(FieldElement val) { return new BigIntegerFieldElement(f, bi.add(((BigIntegerFieldElement)val).bi)).mod(f.getQ()); }
public FieldElement subtract(FieldElement val) { return new BigIntegerFieldElement(f, bi.subtract(((BigIntegerFieldElement)val).bi)).mod(f.getQ()); }
public FieldElement multiply(FieldElement val) { return new BigIntegerFieldElement(f, bi.multiply(((BigIntegerFieldElement)val).bi)).mod(f.getQ()); }
public FieldElement invert() { // Euler's theorem //return modPow(f.getQm2(), f.getQ()); return new BigIntegerFieldElement(f, bi.modInverse(((BigIntegerFieldElement)f.getQ()).bi)); }