@[yaodiguoan](/user/1023793)
```cpp
node anss=other*ans;
```
这个,是不是应该是
```cpp
node anss=ans*other
```
因为矩阵乘法不满足交换律。
以及上面的矩阵乘法也要改;而且你的矩阵乘法似乎写错了。
by FFTotoro @ 2024-04-15 09:52:19
@[zyc212303](/user/556366) 谢谢,已关
by danlao @ 2024-04-15 11:48:55
@[zyc212303](/user/556366) [重写了一下,还是零分](https://www.luogu.com.cn/record/155909964)
by danlao @ 2024-04-15 14:04:48
@[zyc212303](/user/556366) [把 `n>>=1` 改了还是0分 ](https://www.luogu.com.cn/record/155910172)
by danlao @ 2024-04-15 14:08:26
@[yaodiguoan](/user/1023793) 全都是无法查看评测记录。你问问题至少别为难别人。
而且你的矩阵乘法**写错了**,建议重新学一下。
```cpp
ans.m[j][k]=(ans.m[j][k]+x.m[j][i]*y.m[i][k])%mod;
```
才是对的吧。。。
by FFTotoro @ 2024-04-15 14:24:28
@[zyc212303](/user/556366) 哦,忘了我没进代码公开计划
代码:
```
#include <bits/stdc++.h>
using namespace std;
#define hh putchar('\n')
#define kg putchar(' ')
//#define int long long
#define int __int128
namespace quickread{
inline int read(){
int x=0,f=1;char ch=getchar();
while (ch<'0'||ch>'9'){if(ch=='-')f=-1;ch=getchar();}
while (ch>='0'&&ch<='9'){x=x*10+ch-'0';ch=getchar();}
return x*f;
}
inline void write(int x){
if(x<0){putchar('-');x=-x;}
if(x>9)write(x/10);
putchar(x%10+'0');
}
}
using namespace quickread;
const int N=1e6+10;
int mod;
struct node{
int mat[5][5],n,m;
node(int n1,int m1){memset(mat,0,sizeof(mat)),n=n1,m=m1;}
void build1(int a,int b){mat[1][1]=a;mat[2][1]=b;}
void build2(int a){mat[1][1]=a,mat[1][2]=mat[2][2]=1;}
};
node operator * (const node & a,const node & b){
node ans(a.n,b.m);
for(int i=1;i<=ans.n;i++)
for(int j=1;j<=ans.m;j++)
for(int k=1;k<=a.m;k++)
ans.mat[i][j]=(ans.mat[i][j]+a.mat[i][k]*b.mat[j][k] % mod)%mod;
return ans;
}
int n,a,c,g,x0;
signed main(){
// ios::sync_with_stdio(0);
// cin.tie();cout.tie();
mod=read(),a=read(),c=read(),x0=read(),n=read(),g=read();
node ans(2,1),a1(2,2);
ans.build1(x0,c),a1.build2(a);
while(n){
if(n&1) ans=a1*ans;
a1=a1*a1;
n/=2;
}
write(ans.mat[1][1]%g);
return 0;
}
```
by danlao @ 2024-04-15 20:13:03
@[yaodiguoan](/user/1023793) 你矩阵乘法还是错的。
```cpp
ans.mat[i][j]=(ans.mat[i][j]+a.mat[i][k]*b.mat[j][k] % mod)%mod; // 这是错的
ans.mat[i][j]=(ans.mat[i][j]+a.mat[i][k]*b.mat[k][j] % mod)%mod; // 这是对的
```
你从哪学的?建议**重学**。
变量的顺序背不住你去贺题解吧。。。这种真的,,,你连矩乘的意义都没理解就在那死背。。。
by FFTotoro @ 2024-04-15 20:54:29
[把上面的矩阵乘法一改,这不就过了,,,](https://www.luogu.com.cn/record/155957801)
by FFTotoro @ 2024-04-15 20:56:38
@[zyc212303](/user/556366) 谢谢大佬怒喷!我这就去重学!
by danlao @ 2024-04-15 20:57:39
@[zyc212303](/user/556366) 刚去oi-wiki上看了,是我没搞懂,谢谢大佬指出我的错误!
by danlao @ 2024-04-15 21:09:22