• [poj2891]Strange Way to Express Integers(扩展中国剩余定理)


    题意:求解一般模线性同余方程组

    解题关键:扩展中国剩余定理求解。两两求解。

    $left{ {egin{array}{*{20}{l}}
    {x = {r_1}\,mod \,{m_1}}\
    {x = {r_2}\,mod \,{m_2}}
    end{array}} ight.$

    为了代码的符号清晰,将转化后的系数都为正,故如下设方程。

    $left{ {egin{array}{*{20}{l}}
    {x = {r_1} - {k_1}{m_1}}\
    {x = {r_2} + {k_2}{m_2}}
    end{array}} ight.$

    ${r_1} - {r_2} = {k_2}{m_2} + {k_1}{m_1}$

    以上其实是另一个模线性同余方程组。

    考虑$ax + by = c$

    由模线性同余方程的存在定理:$gcd (a,b)|c$

    $egin{array}{l}
    frac{a}{{gcd (a,b)}}x + frac{b}{{gcd (a,b)}} = frac{c}{{gcd (a,b)}}\
    x equiv {(frac{a}{{gcd (a,b)}})^{ - 1}}frac{c}{{gcd (a,b)}}mod (frac{b}{{gcd (a,b)}})
    end{array}$

     回归原式:

    $x$即为${k_1}$

    推出原式中的$x$

    $x = {r_1} - {k_1}{m_1} = {r_1} - {m_1}{(frac{{{m_1}}}{{gcd ({m_1},{m_2})}})^{ - 1}}frac{{{r_2} - {r_1}}}{{gcd ({m_1},{m_2})}}mod frac{{{m_1}{m_2}}}{{gcd ({m_1},{m_2})}}$

    一般化这个结论,模数即为lcm,可直接记住

     1 #include<cstdio>
     2 #include<cstring>
     3 #include<algorithm>
     4 #include<cstdlib>
     5 #include<cmath>
     6 #include<iostream>
     7 using namespace std;
     8 typedef long long ll;
     9 ll x,y,r[20002],m[20002],n;
    10 ll extgcd(ll a,ll b,ll &x,ll &y){
    11     ll d=a;
    12     if(b)   d=extgcd(b,a%b,y,x),y-=a/b*x;
    13     else  x=1,y=0;
    14     return d;
    15 }
    16 ll excrt(int n,ll *m,ll *r){
    17     ll M=m[0],pre=r[0],d;//a是模数 
    18     for(int i=1;i<n;i++){
    19         d=extgcd(M,m[i],x,y);
    20         if((pre-r[i])%d!=0) return -1;
    21         x=(pre-r[i])/d*x%m[i];
    22         pre-=x*M;
    23         M=M/d*m[i];//lcm 
    24         pre%=M;
    25     }
    26     return (pre%M+M)%M;
    27 }
    28 int main(){
    29     ios::sync_with_stdio(0);
    30     while(cin>>n){
    31         for(int i=0;i<n;i++) cin>>m[i]>>r[i];
    32         ll ans=excrt(n,m,r);
    33         printf("%lld
    ",ans);
    34     } 
    35 }
  • 相关阅读:
    mysql数据库表中判断字段是否存在,如果不存在则创建该字段
    PHP同时操作两个mysql数据库
    Bootstrap-分页插件Paginator
    NLP--自然语言处理与机器学习会议
    对CURL的一些研究
    Nginx完整配置说明
    SecureCRT自动登陆到服务器的脚本以及脚本编写简单说明
    Fast CGI 工作原理
    FastCGI中文规范
    Linux +apache+fastcgi运行c/c++
  • 原文地址:https://www.cnblogs.com/elpsycongroo/p/7617436.html
Copyright © 2020-2023  润新知