1005

细细看下题目中的条件要求:1 <= n <= 100,000,000,你就应该明白本题绝不是简单的递归就可以解决的,上述代码的答案是TLE.(后来加):其实看到题目中出现求余运算,我就应该很快的反应过来,这道题目绝对不是简单的递归运算就可以解决问题的,因为求余运算会有一定的重复,所以,本题中的数据一定会出现重复,从重复中找到规律,问题就可以解决了。

      其实解决本题的方法是找出规律,当f1,f2和a b的值确定后,你就可以利用题目中给出的公式往后计算了,如果我们把所有fn的取值算作一个队列(非数据结构中的队列)的话,可以肯定的是,这个队列不会延展太长,到了一定长度,肯定会出现重复,而我们需要做的就是找出这个重复点。
后来问月,他是专门搞数论的,他说%决定了它后面的元素会重复,当遇到两个都是1时,后面的元素就开始重复了,

if(circle[i]==1&&circle[i-1]==1)
    
break;
circle[i+1]必定是2,circle[i+2]必定是3,……以后就循环下去了。

原文地址:https://www.cnblogs.com/anderson0/p/1454444.html