@Override public boolean isOdd() { return NumberUtil.isOdd(fBigIntValue); }
public boolean isOdd() { return NumberUtil.isOdd(fInteger); }
public IInteger factorial(final IInteger iArg) { BigInteger result = BigInteger.ONE; final BigInteger biggi = iArg.getBigNumerator(); BigInteger start; if (biggi.compareTo(BigInteger.ZERO) == -1) { result = BigInteger.valueOf(-1); if (NumberUtil.isOdd(biggi)) { start = BigInteger.valueOf(-3); } else { start = BigInteger.valueOf(-2); } for (BigInteger i = start; i.compareTo(biggi) >= 0; i = i.add(BigInteger.valueOf(-2))) { result = result.multiply(i); } } else { if (NumberUtil.isOdd(biggi)) { start = BigInteger.valueOf(3); } else { start = BigInteger.valueOf(2); } for (BigInteger i = start; i.compareTo(biggi) <= 0; i = i.add(BigInteger.valueOf(2))) { result = result.multiply(i); } } final IInteger i = F.integer(result); return i; }
public static IInteger fibonacci(final IInteger iArg) { BigInteger a = BigInteger.ONE; BigInteger b = BigInteger.ZERO; BigInteger c = BigInteger.ONE; BigInteger d = BigInteger.ZERO; BigInteger f = BigInteger.ZERO; final BigInteger c2 = BigInteger.valueOf(2); BigInteger temp = iArg.getBigNumerator(); while (!NumberUtil.isZero(temp)) { if (NumberUtil.isOdd(temp)) { d = f.multiply(c); f = a.multiply(c).add(f.multiply(b).add(d)); a = a.multiply(b).add(d); } d = c.multiply(c); c = b.multiply(c).multiply(c2).add(d); b = b.multiply(b).add(d); temp = temp.shiftRight(1); } final IInteger i = F.integer(f); return i; }
public static BigInteger jacobiSymbol(BigInteger a, BigInteger b) { if (a.equals(BigInteger.ONE)) { return BigInteger.ONE; } if (a.equals(BigInteger.ZERO)) { return BigInteger.ZERO; } if (a.equals(BI_TWO)) { return BigIntegerSym.jacobiSymbolF(b); } if (!NumberUtil.isOdd(a)) { BigInteger aDIV2 = a.shiftRight(1); return jacobiSymbol(aDIV2, b).multiply(jacobiSymbol(BI_TWO, b)); } return jacobiSymbol(b.mod(a), a).multiply(BigIntegerSym.jacobiSymbolG(a, b)); }