当n=2,当P设为(int)1e9+7时输出38,当P设为1000000007时输出10。
这是为什么?
#include <bits/stdc++.h>
using namespace std;
#define int long long
#define P (int)1e9+7//1000000007
int n;
int ans[3][3],a[3][3],c[3][3];
void mul(int a1[3][3],int a2[3][3],bool f)
{
memset(c,0,sizeof(c));
for(int i=1;i<=2;i++){
for(int j=1;j<=2;j++){
for(int k=1;k<=2;k++) c[i][j]=(c[i][j]+a1[i][k]*a2[k][j])%P;
}
}
if(!f) memcpy(a,c,sizeof(c));
else memcpy(ans,c,sizeof(c));
}
main()
{
ios::sync_with_stdio(0);cin.tie(0),cout.tie(0);
cin>>n;
a[1][1]=a[2][2]=3;
a[1][2]=a[2][1]=1;
ans[1][1]=ans[2][2]=1;
while(n){
if(n&1) mul(ans,a,1);
mul(a,a,0);
n>>=1;
}
cout<<ans[1][1];
return 0;
}