#include <cstdio>
#include <iostream>
#include <cstring>
using namespace std;
struct m {
int a[3][3];
};
typedef struct m matrix;
matrix mod(matrix x){
for (int i = 1;i <= 2;i ++)
for (int j = 1;j <= 2;j ++)
x.a[i][j] %= 10007;
return x;
}
matrix multiply(matrix x,matrix y);
int fastMod(int n){
matrix ans;
matrix x;
x.a[1][1] = 1;
x.a[1][2] = 1;
x.a[2][1] = 1;
x.a[2][2] = 0;
ans.a[1][1] = 1;
ans.a[1][2] = 0;
ans.a[2][1] = 0;
ans.a[2][2] = 1;
x = mod(x);
while (n){
if (n%2)
ans = multiply(ans,x);
n /= 2;
x = multiply(x,x);
//x = (x*x)%m;
}
return ans.a[1][1];
}
matrix multiply(matrix x,matrix y){
matrix temp;
memset (temp.a,0,sizeof(temp.a));
for (int i = 1;i < 3;i ++){
for (int j = 1;j < 3;j ++)
for (int k = 1;k < 3;k ++)
temp.a[i][j] += x.a[i][k] * y.a[k][j];
}
temp = mod(temp);
return temp;
}
int main()
{
int t;
scanf("%d",&t);
while (t --){
int n;
scanf("%d",&n);
printf("%d\n",fastMod(n-1));
}
}
矩阵快速幂2
最新推荐文章于 2024-04-26 11:46:51 发布