hdu 1005 Number Sequence
#include <iostream>
using namespace std;
struct Matrix
{
Matrix(int a,int b,int c,int d):a11(a),a12(b),a21(c),a22(d) {}
friend Matrix operator*(const Matrix &M1,const Matrix &M2);
long a11,a12,a21,a22;
};
Matrix operator*(const Matrix &M1,const Matrix &M2)
{//很bj的写法 -||-
long b11,b12,b21,b22;
b11=(M1.a11*M2.a11 + M1.a12*M2.a21)%7;
b12=(M1.a11*M2.a12 + M1.a12*M2.a22)%7;
b21=(M1.a21*M2.a11 + M1.a22*M2.a21)%7;
b22=(M1.a21*M2.a12 + M1.a22*M2.a22)%7;
return Matrix(b11,b12,b21,b22);
}
Matrix solve(Matrix a,int n)
{
Matrix s(1,0,0,1);
//二分加速
while(n)
{
if(n&1) s=s*a;
a=a*a;
n=n>>1;
}
return s;
}
int main()
{
Matrix s(0,0,0,0);
long A,B,n;
while(cin>>A>>B>>n && (A||B||n))
{
if(n<=2)
{
cout<<1<<endl;
continue;
}
Matrix a(A%7,1,B%7,0);
s=solve(a,n-2);
cout<<( (s.a11+s.a21) %7 )<<endl;
}
return 0;
}
浙公网安备 33010602011771号