測試
h2
h3-1
程式碼
#include <bits/stdc++.h>
using namespace std;
#define int long long
#define nn "\n"
#define nnn " "
#define nnnn "\n----------------------\n"
#define N 105
int n,mod;
int v[N][N];
int fpow(int x,int y){
if(!y)return 1;
if(y&1)return fpow(x,y-1)*x%mod;
int z=fpow(x,y/2)%mod;
return z*z%mod;
}
void out(){
cout<<nnnn;
for(int i=1;i<=n;i++){
for(int j=1;j<=n+1;j++){
cout<<v[i][j]<<nnn;
}
cout<<nn;
}
}
signed main(){
ios::sync_with_stdio(0);
cin.tie(0);
istringstream cin("3 101 \
69 59 89 \
5 4 2 \
3 6 7 \
2 0 1");
cin>>n>>mod;
for(int i=1;i<=n+1;i++){//存入陣列
for(int j=1;j<=n;j++){
cin>>v[j][n-i+2];
}
}
out();
for(int i=1;i<=n;i++){
//例外狀況交換(目標為0)
if(v[i][i]==0){
for(int j=i;j<=n;j++){//往後找不是0的
if(v[j][i]!=0){//找到不是0的
for(int k=1;k<=n+1;k++){//交換
swap(v[i][k],v[j][k]);
}
break;
}
}
}
//第i個變成1
int e=fpow(v[i][i],mod-2);
for(int j=i;j<=n+1;j++){//前面都是0了,往後乘模逆元就好
v[i][j]=v[i][j]*e%mod;
}
//其他變成0
for(int j=1;j<=n;j++){
if(j==i)continue;//跳過自己
int tmp=v[j][i];//要先存起來不然會被改掉
for(int k=i;k<=n+1;k++){
v[j][k]= ((v[j][k] - (v[i][k]*tmp))%mod+mod)%mod;
}
}
out();
}
}
123

456
#include <bits/stdc++.h>
using namespace std;
#define int long long
#define nn "\n"
#define nnn " "
#define nnnn "\n----------------------\n"
#define N 105
int n,mod;
int v[N][N];
int fpow(int x,int y){
if(!y)return 1;
if(y&1)return fpow(x,y-1)*x%mod;
int z=fpow(x,y/2)%mod;
return z*z%mod;
}
123
