/** {@inheritDoc} */ @Override public boolean isProbablePrime() { if (fIntValue < 0) { return negate().isProbablePrime(); } return LongMath.isPrime(fIntValue); }
/** * @param value * @return */ @Override public IInteger multiply(int value) { switch (fIntValue) { case 0: return F.C0; case 1: return valueOf(value); case -1: return valueOf(value).negate(); default: if (value == 0) { return F.C0; } if (value == 1) { return this; } return valueOf((long) fIntValue * value); } }
@Override public IInteger[] nthRootSplit(int n) throws ArithmeticException { IInteger[] result = new IInteger[2]; if (sign() == 0) { result[0] = F.C0; result[1] = F.C1; return result; } else if (sign() < 0) { if (n % 2 == 0) { // even exponent n throw new ArithmeticException(); } else { // odd exponent n result = negate().nthRootSplit(n); result[1] = result[1].negate(); return result; } } long b = fIntValue; long[] nthRoot = Primality.countRoot1021(b, n); result[0] = AbstractIntegerSym.valueOf(nthRoot[0]); result[1] = AbstractIntegerSym.valueOf(nthRoot[1]); return result; }
@Override public IRational multiply(IRational parm1) { if (parm1.isZero()) { return F.C0; } if (parm1.isOne()) { return this; } if (parm1.isMinusOne()) { return this.negate(); } if (parm1 instanceof AbstractFractionSym) { return ((AbstractFractionSym) parm1).multiply(this); } if (parm1 instanceof IntegerSym) { IntegerSym is = (IntegerSym) parm1; long newnum = (long) fIntValue * (long) is.fIntValue; return valueOf(newnum); } BigIntegerSym p1 = (BigIntegerSym) parm1; BigInteger newnum = toBigNumerator().multiply(p1.toBigNumerator()); return valueOf(newnum); }
} else { result = ((IntegerSym) negate()).nthRootSplit(n); result[1] = (IInteger) result[1].negate(); return result;
} else { return negate().nthRoot(n).negate();
/** * 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; } }