1. 程式人生 > >矩陣快速冪取模

矩陣快速冪取模

pan cout style else str ostream continue bsp col

#include<iostream>
using namespace std;
const int Mod=10000;
int main()
{
    long long n,a,b,c,d,a1,b1,c1,d1,a2,b2,c2,d2;
    while(cin>>n)
    {
        if(n==-1)
        break;
        if(n==0||n==1)
        {
        cout<<n<<endl;
        continue; 
        } 
        a
=1;b=0;c=0;d=1; a2=1;b2=1;c2=1;d2=0; while(n>0) { if(n%2!=0) { a1=(a*a2)%Mod+(b*c2)%Mod; b1=(a*b2)%Mod+(b*d2)%Mod; c1=(c*a2)%Mod+(d*c2)%Mod; d1=(c*b2)%Mod+(d*d2)%Mod; a
=a1;b=b1;c=c1;d=d1; } n=n/2; a1=((a2*a2)%Mod+(b2*c2)%Mod)%Mod; b1=((a2*b2)%Mod+(b2*d2)%Mod)%Mod; c1=((a2*c2)%Mod+(c2*d2)%Mod)%Mod; d1=((b2*c2)%Mod+(d2*d2)%Mod)%Mod; a2=a1;b2=b1;c2=c1;d2=d1; }
if(b%Mod==0) cout<<"0"<<endl; else cout<<b%Mod<<endl; } }

矩陣快速冪取模