7.数学知识——中国剩余定理、高斯消元

文章目录

  • 中国剩余定理
  • 高斯消元

一、中国剩余定理(求一组同余方程的解x)

1.core idea

2.代码如下:

​
​
​
​
​
​
LL exgcd(LL a,LL b,LL &x,LL &y){//求乘法逆元(转化为不定方程+求不定方程的解(扩欧几里得算法、(x%m+m)%m))
    if(b==0){x=1, y=0; return a;}
    LL d, x1, y1;
    d = exgcd(b, a%b, x1, y1);
    x = y1, y = x1-a/b*y1;
    return d;
}

LL CRT(LL m[], LL r[]){//中国剩余定理
    LL M = 1, ans = 0;
    for(int i=1;i<=n;i++) M*=m[i];
    ---------------------------------
    for(int i=1; i<=n; i++){
        LL c = M/m[i];
        ----------------------
        LL x,y;
        exgcd(c, m[i], x, y);//求c的乘法逆元x
        ----------------------
        ans = (ans+r[i]*c*x%M)%M;
    }
    return (ans%M + M)%M;
}

​

​

​

​

​

​

exgcd(c, m[i], x, y) 函数调用后,变量 x 就是 c 关于 mi的乘法逆元。这是因为 exgcd 函数求解的是 c 和 mi的最大公约数,以及满足 cx+miy=gcd(c,mi) 的整数 x 和 y。由于 c 和 mi 互质,它们的最大公约数为 1,因此 cx+miy=1,这表明 x 是 c 关于 mi 的乘法逆元。

为了确保 x 是一个有效的模 mi下的逆元,我们需要将其调整到 0 到 mi−1 的范围内。因此,代码中使用了 x % M 来确保 x 是一个非负整数。

时间复杂度为O(nlogc) 

二、高斯消元(求线性方程组的解x1,x2,x3...xn)

1.线性方程组

 2.高斯消元法

core idea: 1.枚举对角线上的主元(a_{11},a_{22},a_{33}...a_{nn})2.如果该主元为0,找该位置下面不为0的一行,去交换  3.把该主元变成1(同时对这一行操作)4.把该主元这一列都变成0(主元+-*/?,再把这个结果加到这一列的那个数;.....;...),会带着这一整行发生变化  5.每个主元都操作完后,再从下到上回代求解x_{1},x_{2},x_{3}...x_{n}

演示操作:

 3.代码如下:

bool gauss(){
    for(int i=1; i<=n; i++){ //枚举行列
        int r = i;
        for(int k=i; k<=n; k++) //找非0行
            if(fabs(a[k][i])>eps)
                {r = k; break;}
        if(r!=i) swap(a[r],a[i]); //换行
        if(fabs(a[i][i])<eps) return 0;

        for(int j=n+1; j>=i; j--) //变1
            a[i][j] /= a[i][i];
        for(int k=i+1; k<=n; k++) //变0
            for(int j=n+1; j>=i; j--)
                a[k][j] -= a[k][i]*a[i][j];
    }
    for(int i=n-1; i>=1; i--) //回代
        for(int j=i+1; j<=n; j++)
            a[i][n+1] -= a[i][j]*a[j][n+1];
    return 1; //存在唯一解
}

a[i][n+1] 被更新为第 i 个变量的解。因此,矩阵的最后一列包含了方程组的解。 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值