您的位置:首页 > 其它

循环节 + 矩阵快速幂 - HDU 4291 A Short problem

2014-03-08 17:58 239 查看

A Short problem


Problem's Link

[b]Mean:[/b]

给定一个n,求:g(g(g(n))) % 1000000007

其中:g(n) = 3g(n - 1) + g(n - 2),g(1) = 1,g(0) = 0

[b]analyse:[/b]

很经典的题。
由于n特别大,直接求肯定不行。由于所有的模运算都会出现循环节,可以求出循环节。

由于模数是固定的,可以在本地暴力求出循环节。

对于1000000007,求得循环节为222222224;

对于222222224,求得循环节183120;

最内层对183120取模,将值传给第二层;第二层对222222224取模,将值传给最外层;最外层对1000000007。

这样就大大降低了时间复杂度。

根据递推式构造矩阵,使用矩阵快速幂来求a
.

[b]Time complexity: O(N)[/b]

[b]view code[/b]
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: