递归余七

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).

 

1 <= A, B <= 1000, 1 <= n <= 100,000,000……

 

首先,A+B 余 7 相当于A余7与B余7的和再余7

再次,AB 余 7 相当于A余7与B余7的积再余7 

所以,f(n)就可以化简了。 

需要从小往大了算,凡是和7这个数沾边的,总是规律性很强,可以慢慢找。

那么A与B只可能属于{0...6}的集合,那么枚举所有的<A,B,M>,其中M为循环节

解完了。循环节一出来,只要计算n相对于特定的A和B对M余多少就可以了。

 

这里需要一个小证明:

 

根据抽屉原理,余数类只有七个抽屉,所以,由于f(n)将由两个子状态来决定,每个子状态都对七封闭,则f(n)最多有七七四十九种对应状态,则循环节不大于49。

你可能感兴趣的:(递归余七)