考察数论和二分查找,因为n比较大,要开BigInteger。 要使b^2 = 2 * a * (a + 1)^2, 设a = 2 * k^2, 则b = 4 * k^3 + 2 * k。 让b = 10^19, 解得:k = 2 * 10^6。 所以每次二分查找k的范围为[0,2000000],求第一个4 * k^3 + 2 * k >= n。 import java.util.Scanner; import java.math.BigInteger; public class Main { static BigInteger four = BigInteger.valueOf(4); ...