zoukankan      html  css  js  c++  java
  • 数学网学笔记

    鬼知道我的$exgcd$和谁学的,错了好几次。

    主要写一下中国剩余定理(又叫孙子定理)


    $CRT:mathfrak {Chinese Remainder Theorem}$

    中国剩余定理用于求解同余方程。

    但是它的作用不止如此。

    一般来说,题目中会友好的给一个质数做模数,用费马小定理切掉!

    但是也有嫌题目简单的出题人会给一个合数(由互不相同的质数乘得)

    这时我们就可以用中国剩余定理切了它。

    后续:

    出题人更加毒瘤,把合数出成了:

    如:

    $1000000200=2×2×2×3×5×5×47×35461$

    这时我们又尴尬了,不过也可以拓展。

    用$mathsf{EXCRT}$就可以!管他,我又不会~~

     

     好了,正题!

    用于求解形如:

    egin{cases}x & equiv & ans_1 (mod p_1)\x & equiv & ans_2 (mod p_2) \ & vdots & \x & equiv & ans_n (mod p_n)end{cases}

    毒瘤美好式子。

    然后我们可以把每一个同余方程解出来。用$exgcd$,唔,不会这个就善用搜索引擎吧。

    把代码丢下:

    void exgcd(int a,int b,int &x,int &y)
    {
        if(b==0){ x=1; y=0; return;}
        exgcd(b,a%b,x,y);
        int tp=x;
        x=y; y=tp-a/b*y;
    }
    int china()
    {
        int ans=0,lcm=1,x,y;
        for(int i=1;i<=k;++i) lcm*=b[i];
        for(int i=1;i<=k;++i)
        {
            int tp=lcm/b[i];
            exgcd(tp,b[i],x,y);
            x=(x%b[i]+b[i])%b[i];//x要为最小非负整数解
            ans=(ans+tp*x*a[i])%lcm;
        }
        return (ans+lcm)%lcm;
    }
    //--------------------- 
    //作者:niiick 
    //来源:CSDN 
    //原文:https://blog.csdn.net/niiick/article/details/80229217 
    //版权声明:本文为博主原创文章,转载请附上博文链接!
    

    把链接丢下

    再丢一个

  • 相关阅读:
    第五章 Internet协议
    第四章 地址解析协议
    Learn the shell
    Linux学习前的准备
    第三章 链路层
    第二章 Internet 地址结构
    后台数据导出为Excel
    C#开发客户端、JAVA和tomcat开发服务端
    Java基础
    C++学习笔记--(1)
  • 原文地址:https://www.cnblogs.com/kalginamiemeng/p/MathNote2.html
Copyright © 2011-2022 走看看