f(1) = 1, f(2) = 1, f(n) = (A * f(n - 1) + B * f(n - 2)) mod 7.
Given A, B, and n, you are to calculate the value of f(n)
The input consists of multiple test cases. Each test case contains 3 integers A, B and n on a single line (1 <= A, B <= 1000, 1 <= n <= 100,000,000). Three zeros signal the end of input and this test case is not to be processed.
For each test case, print the value of f(n) on a single line.
乍一看 好简单 简简单单一个递归就能解决了, 结果不能AC. 查了下,知道了,因为1<=n<=100,000,000这个东西,要那么多次...递归的话,结果就绝对是栈溢出了,因为太多了..循环也不能直接就这么用,因为超出时间限制---此乃问题之始;
百度了下才知道 这是有规律的; 一开始想不通,怎么去确定这个规律,为什么一定会有规律,; 好的念头总是来的很突然,第二天一想就想明白了;
思路如下: 先找循环对 --比如3,4,1,5,4,6,3,4,....那么3,4就是我们要找的了..可以去确定周期的长度,为什么说一定会有循环对,因为,对于任意一个数,其后任意跟一个数,,这2个数都是0-6,也就是这两个数最多种可能也不过7*7=49种可能,那么定义一个50长度的数组便足够了;之后就是在这个数组中找到循环啦;
另外 定义Q为周期,那么,n%Q ,和while(n>50)n-=Q; 虽然目的是一样的..不过耗时却不一样.!--1005;