AC日记——3的幂的和 51nod 1013
生活随笔
收集整理的這篇文章主要介紹了
AC日记——3的幂的和 51nod 1013
小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.
3的冪的和
?
思路;
矩陣快速冪;
? sn-1 ? ? ?3 1 ? ? ? ?sn
? * ? ? ? ? ?=
1 ? ? 0 1 ?1
?
來,上代碼:
#include <cstdio> #include <cstring> #include <iostream> #include <algorithm>using namespace std;#define mod 1000000007struct NodeType {long long a[3][3]; }; struct NodeType ans;long long n;struct NodeType mul(NodeType pos) {NodeType res;res.a[1][1]=0,res.a[1][2]=0;res.a[2][1]=0,res.a[2][2]=0;for(int i=1;i<=2;i++){for(int j=1;j<=2;j++){for(int v=1;v<=2;v++){res.a[i][j]=(res.a[i][j]+(pos.a[i][v]*pos.a[v][j])%mod)%mod;}}}return res; }void poww(int mi) {NodeType pos;pos.a[1][1]=3,pos.a[1][2]=1;pos.a[2][1]=0,pos.a[2][2]=1;while(mi>0){struct NodeType res;res.a[1][1]=0,res.a[1][2]=0;res.a[2][1]=0,res.a[2][2]=0;if(mi&1){for(int i=1;i<=2;i++){for(int j=1;j<=2;j++){for(int v=1;v<=2;v++){res.a[i][j]=(res.a[i][j]+(ans.a[i][v]*pos.a[v][j])%mod)%mod;}}}ans=res;}pos=mul(pos),mi=mi>>1;} }int main() {scanf("%lld",&n);n--;ans.a[1][1]=3,ans.a[1][2]=1;ans.a[2][1]=0,ans.a[2][2]=1;poww(n);cout<<(ans.a[1][1]+ans.a[1][2])%mod;return 0; }?
轉(zhuǎn)載于:https://www.cnblogs.com/IUUUUUUUskyyy/p/6746831.html
總結(jié)
以上是生活随笔為你收集整理的AC日记——3的幂的和 51nod 1013的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 梦到捡钱是上辈子的子孙给你烧钱了吗
- 下一篇: project开发的程序设计与逻辑设计