[[練習問題]] 繰り返し二乗法。 import java.math.*; public class Main { private BigInteger pow(BigInteger val, int n) { BigInteger res = BigInteger.ONE; while(n > 0) { if((n & 1) == 1) { res = res.multiply(val); } val = val.multiply(val); n >>= 1; } return res; } private BigInteger pow(int a, int n) { return pow(BigInteger.valueOf(a), n); } private void doIt() { System.out.printf("%s\n", pow(2, 0)); System.out.printf("%s\n", pow(2, 1)); System.out.printf("%s\n", pow(2, 2)); System.out.printf("%s\n", pow(2, 10)); System.out.printf("%s\n", pow(2, 1024)); System.out.printf("%s\n", pow(2, 1000007)); // 30秒ぐらい。 System.out.printf("%s\n", BigInteger.valueOf(2).pow(1000007)); // これも30秒ぐらい。 } public static void main(String[] args) { new Main().doIt(); } }