Code example for BigInteger

Methods: add

0
	private static BigInteger P(long f, long r) {
		if (f == 1) {
			return BigInteger.ONE.add(P(f+1,r-1));
		} 
		if (r == 2) {
			return ((f+r)%2 == 1 ? P(f, r-1).add(BigInteger.ONE) : P(f, r+1).subtract(TWO));
		} 
		if (r == 1) {
			BigInteger N = BigInteger.valueOf(f/2);
			return (f % 2 == 0 ? TWO.multiply(N.pow(2)) : TWO.multiply(N).multiply(N.add(BigInteger.ONE)));
		} 
		long k = (r-1)/2;
		return P(f + 2*k, r-2*k).add(BigInteger.valueOf(((f+r)%2 == 1 ? k : -k)));
	} 
}