hrbust/哈理工oj 1787 New Fibonacci Number【欧拉降幂+矩阵快速幂】
生活随笔
收集整理的這篇文章主要介紹了
hrbust/哈理工oj 1787 New Fibonacci Number【欧拉降幂+矩阵快速幂】
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
| New Fibonacci Number | ||||||
| ||||||
| Description | ||||||
| 定義一種新型的Fibonacii?數列: ? F[0] = a F[1] = b F[i] = F[i-1] * F[i-2] (n > 1) ? 請根據給出的a,b,n,求出F[n]的大小。 | ||||||
| Input | ||||||
| 多組測試數據,處理到文件結束,對于每組測試數據: 輸入三個整數a,b,n(0≤a,b,n≤10^9) | ||||||
| Output | ||||||
| 對于每組測試數據輸出F[n]對1000000007取模后的結果,每組輸出占一行。 | ||||||
| Sample Input | ||||||
| 0 1 0 6 10 2 | ||||||
| Sample Output | ||||||
| 0 60 | ||||||
| Author | ||||||
| 周洲 @hrbust |
思路:
枚舉一下:
F3=F1^2*F0
F4=F1^3*F0^2
F5=F1^5*F0^3
不難發現,F1和F0的冪是一個斐波那契數列組成的,辣么思路就不難建立了。因為n比較大,所以我們采用矩陣快速冪的方式來求F1和F0的冪分別是多大,其實也就是在求一個斐波那契數列,其遞推式不難推出:
矩陣為:
1 1?
1 0
既然知道了矩陣的構建,那么冪的值也能求出,最后一步就是求F1^冪*F0^冪,然后相乘即可。
這里要注意一個點:
?a^n%mod!=a^(n%mod)%mod;所以我們要使用歐拉降冪的方法來解決這個問題,所求公式為:
其中phi指的是歐拉函數。
這里1e9+7的phi值為1e9+6,一個很常用的值,這里就不使用歐拉函數來寫了、
AC代碼如下:
總結
以上是生活随笔為你收集整理的hrbust/哈理工oj 1787 New Fibonacci Number【欧拉降幂+矩阵快速幂】的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 用python做数据分析pdf_利用py
- 下一篇: 隐隐约约 听 RazorEngine 在