小白上的分治法的例题。
其实这个问题主要是理解分治法就可以了,然后就是高精度的事情。。
推出来的公式是F(n) = 4 * F(n-1) + 1。递归边界是F(1) = 1。
我用Java做了,另外hcbbt提供了一种名为万进制的高精度计算方式。。
import java.math.*;
import java.io.*;
import java.text.*;
import java.util.*;
public class Main {
public static BigDecimal f(int n) {
if (n == 1) {
return BigDecimal.valueOf(1);
}
return f(n - 1).multiply(BigDecimal.valueOf(4)).add(BigDecimal.valueOf(1));
}
public static void main(String[] args) {
Scanner cin = new Scanner(new BufferedInputStream(System.in));
int T, k;
T = cin.nextInt();
while (T-- > 0) {
k = cin.nextInt();
BigDecimal a = f(k);
System.out.println(a);
}
}
}