Skip to content

測試

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
alt text
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

alt text

h3-2

h2

h3-1

h3-2

h2

h3-1

h3-2

h2

h3-1

h3-2

h2

h3-1

h3-2

h2

h3-1

h3-2