zoukankan      html  css  js  c++  java
  • 中国剩余定理

    /*

    设a≡b[i](mod w[i)

    i=1->n;  

    我们记k=w[1]*w[2]*w[3]*……*w[n]  

    则方程组在mod k 同余的意义下有唯一解  

    我们令x=(k/w[i])*yi 

    那么方程等价于(k/w[i])y≡1(mod w[i])  

    那么方程组的解x0=b1x1+b2x2+...+bnxn(mod k)

    */

    #include<iostream>
    #include<cstdio>
    #include<algorithm>
    using namespace std;
    long long n,w[1010],b[1010],x,y,a,k=1,j;
    long long exgcd(long long aa,long long bb)
    {
        if(bb==0)
        {
            x=1;
            y=0;
            return aa;
        }
        long long _gcd=exgcd(bb,aa%bb);
        long long kk=x;
        x=y;
        y=kk-aa/bb*y;
        return _gcd;
    }//扩欧求解方程
    int main()
    {
        scanf("%d",&n);
        for(int i=1;i<=n;i++)scanf("%d%d",&w[i],&b[i]);
        for(int i=1;i<=n;i++)k*=w[i];//求k
        for(int i=1;i<=n;i++)
        {
            j=k/w[i];
            exgcd(w[i],j);/*解方程(k/w[i])y≡1(mod w[i])*/
        a=(a+y*j*b[i])%k;/*累加*/
       }
          if(a<0)a+=k;
          printf("%lld",a); 
    
    }
  • 相关阅读:
    Ruby(1):入门
    html 制作静态页面新知识
    mysql 可视化界面操作指令
    html 基础
    Eclipse导入Java工程导入错误
    shell 25个常用命令
    java JDBC
    java 8新特性 instant
    git
    spring mvc 注解详解
  • 原文地址:https://www.cnblogs.com/zzh666/p/8909419.html
Copyright © 2011-2022 走看看