f[1] = 'b', f[2] = 'a', f[i] = f[i - 1] + f[i - 2]
斐波那契数列的字符串,给你n和m,前m位中,最长的前缀等于后缀的长度是多少。1≤n≤1000, 1≤m≤length(f[n])
规律题,虽然我不知道为什么。
1 import java.io.*;
2 import java.util.*;
3 import java.math.*;
4 public class Main{
5 //Scanner cin = Scanner(System.in);
6 static BigInteger f[] = new BigInteger[1005];
7 public static void main(String[] args){
8 f[1] = new BigInteger("1");
9 f[2] = new BigInteger("2");
10 for(int i = 3; i <= 1001; i++){
11 //f[i].valueOf(f[i - 1);
12 //f[i] = f[i - 1];
13 f[i] = f[i - 1].add(f[i - 2]);
14 //f[i].add(f[i - 2]);
15 //System.out.println(f[i]);
16 }
17 Scanner cin = new Scanner(System.in);
18 int T = cin.nextInt();
19 int n;
20 BigInteger m;
21 for(int cas = 1; cas <= T; cas++){
22 n = cin.nextInt();
23 m = cin.nextBigInteger();
24 BigInteger mm = m.add(new BigInteger("1"));
25 int p = 0;
26 for(int i = 1; i <= 1001; i++){
27 if(f[i].compareTo(mm) > 0){
28 p = i;
29 break;
30 }
31 }
32 BigInteger ans = m.subtract(f[p - 2]);
33 System.out.println(ans.mod(new BigInteger("258280327")));
34 }
35
36 }
37 }
转载于:https://www.cnblogs.com/macinchang/p/4703052.html