39 lines
1.3 KiB
Java
39 lines
1.3 KiB
Java
import java.math.BigInteger;
|
|
|
|
public final class ArithmeticDerivative {
|
|
|
|
public static void main(String[] aArgs) {
|
|
System.out.println("Arithmetic derivatives for -99 to 100 inclusive:");
|
|
for ( int n = -99, column = 0; n <= 100; n++ ) {
|
|
System.out.print(String.format("%4d%s",
|
|
derivative(BigInteger.valueOf(n)), ( ++column % 10 == 0 ) ? "\n" : " "));
|
|
}
|
|
System.out.println();
|
|
|
|
final BigInteger seven = BigInteger.valueOf(7);
|
|
for ( int power = 1; power <= 20; power++ ) {
|
|
System.out.println(String.format("%s%2d%s%d",
|
|
"D(10^", power, ") / 7 = ", derivative(BigInteger.TEN.pow(power)).divide(seven)));
|
|
}
|
|
}
|
|
|
|
private static BigInteger derivative(BigInteger aNumber) {
|
|
if ( aNumber.signum() == -1 ) {
|
|
return derivative(aNumber.negate()).negate();
|
|
}
|
|
if ( aNumber == BigInteger.ZERO || aNumber == BigInteger.ONE ) {
|
|
return BigInteger.ZERO;
|
|
}
|
|
BigInteger divisor = BigInteger.TWO;
|
|
while ( divisor.multiply(divisor).compareTo(aNumber) <= 0 ) {
|
|
if ( aNumber.mod(divisor).signum() == 0 ) {
|
|
final BigInteger quotient = aNumber.divide(divisor);
|
|
return quotient.multiply(derivative(divisor)).add(divisor.multiply(derivative(quotient)));
|
|
}
|
|
divisor = divisor.add(BigInteger.ONE);
|
|
}
|
|
return BigInteger.ONE;
|
|
}
|
|
|
|
}
|