奇怪的问题
查看原帖
奇怪的问题
390770
D2T1xubiaoshi楼主2022/12/10 17:44
    int c, r;
    ll val;
    for(c = 1, r = 1; c <= n; ++ c){
        int tmp = r;
        for(int i = r; i <= n; ++ i){
            if(a[i][c]){
                tmp = i;
            }
        }
        if(!a[tmp][c]){
            continue;
        }
        swap(a[tmp], a[r]);
        swap(b[tmp], b[r]);
        val = inv(a[r][c]);
        for(int i = 1; i <= n; ++ i){
            a[r][i] = a[r][i] * val % P;
            b[r][i] = b[r][i] * val % P;
        }
        for(int i = 1; i <= n; ++ i){
            if(i != c){
                val = a[i][c];
                for(int j = 1; j <= n; ++ j){
                    a[i][j] = (a[i][j] - a[r][j] * val % P + P) % P;
                    b[i][j] = (b[i][j] - b[r][j] * val % P + P) % P;
                }
            }
        }
        ++ r;
    }
    //here******
    return r <= n;
}

如果是正常的高斯消元,到了这一步 a 应该变为了对角线全是1的阶梯矩阵,还需从下往上带回,那为什么矩阵求逆时这里就直接变成了单位矩阵呢

2022/12/10 17:44
加载中...