private IntegerSym jacobiSymbolG(IntegerSym i2) { IntegerSym a = mod(IntegerSym.valueOf(4)); if (a.compareTo(IntegerSym.valueOf(1)) == 0) { return IntegerSym.valueOf(1); } IntegerSym b = mod(IntegerSym.valueOf(4)); if (b.compareTo(IntegerSym.valueOf(1)) == 0) { return IntegerSym.valueOf(1); } return IntegerSym.valueOf(-1); }
if (q[0].compareTo(p) < 0) { result.add(b); break;
public IntegerSym moebiusMu() { if (this.compareTo(IntegerSym.valueOf(1)) == 0) { return IntegerSym.valueOf(1); } IAST ast = factorInteger(); IntegerSym max = IntegerSym.valueOf(1); for (int i = 1; i < ast.size(); i++) { IAST element = (IAST) ast.get(i); IntegerSym c = (IntegerSym) element.get(2); if (c.compareTo(max) > 0) { max = c; } } if (max.compareTo(IntegerSym.valueOf(1)) > 0) { return IntegerSym.valueOf(0); } if (((ast.size() - 1) & 0x00000001) == 0x00000001) { // odd number return IntegerSym.valueOf(-1); } return IntegerSym.valueOf(1); }
public IntegerSym jacobiSymbol(IntegerSym b) { if (this.compareTo(IntegerSym.valueOf(1)) == 0) { return IntegerSym.valueOf(1); } if (this.compareTo(IntegerSym.valueOf(2)) == 0) { return b.jacobiSymbolF(); } if (!isOdd()) { return this.quotient(IntegerSym.valueOf(2)).jacobiSymbol(b).multiply(IntegerSym.valueOf(2).jacobiSymbol(b)); } return b.quotient(this).jacobiSymbol(this).multiply(jacobiSymbolG(b)); }
/** * Returns the nth-root of this integer. * * @return <code>k<code> such as <code>k^n <= this < (k + 1)^n</code> * @throws ArithmeticException * if this integer is negative and n is even. */ public IInteger nthRoot(int n) throws ArithmeticException { if (sign() == 0) { return IntegerSym.valueOf(0); } else if (sign() < 0) { if (n % 2 == 0) { // even exponent n throw new ArithmeticException(); } else { // odd exponent n return (IntegerSym) ((IntegerSym) negate()).nthRoot(n).negate(); } } else { IntegerSym result; IntegerSym temp = this; do { result = temp; temp = divideAndRemainder(temp.pow(n - 1))[0].add(temp.multiply(IntegerSym.valueOf(n - 1))).divideAndRemainder( IntegerSym.valueOf(n))[0]; } while (temp.compareTo(result) < 0); return result; } }