zoukankan      html  css  js  c++  java
  • 1788

    /**
    中国剩余定理(不互质)
    */
    #include <iostream>
    #include <cstdio>
    #include <cstring>
    using namespace std;
    typedef __int64 int64;
    int64 Mod;

    int64 gcd(int64 a, int64 b)
    {
        if(b==0)
            return a;
        return gcd(b,a%b);
    }

    int64 Extend_Euclid(int64 a, int64 b, int64&x, int64& y)
    {
        if(b==0)
        {
            x=1,y=0;
            return a;
        }
        int64 d = Extend_Euclid(b,a%b,x,y);
        int64 t = x;
        x = y;
        y = t - a/b*y;
        return d;
    }

    //a在模n乘法下的逆元,没有则返回-1
    int64 inv(int64 a, int64 n)
    {
        int64 x,y;
        int64 t = Extend_Euclid(a,n,x,y);
        if(t != 1)
            return -1;
        return (x%n+n)%n;
    }

    //将两个方程合并为一个
    bool merge(int64 a1, int64 n1, int64 a2, int64 n2, int64& a3, int64& n3)
    {
        int64 d = gcd(n1,n2);
        int64 c = a2-a1;
        if(c%d)
            return false;
        c = (c%n2+n2)%n2;
        c /= d;
        n1 /= d;
        n2 /= d;
        c *= inv(n1,n2);
        c %= n2;
        c *= n1*d;
        c += a1;
        n3 = n1*n2*d;
        a3 = (c%n3+n3)%n3;
        return true;
    }

    //求模线性方程组x=ai(mod ni),ni可以不互质
    int64 China_Reminder2(int len, int64* a, int64* n)
    {
        int64 a1=a[0],n1=n[0];
        int64 a2,n2;
        for(int i = 1; i < len; i++)
        {
            int64 aa,nn;
            a2 = a[i],n2=n[i];
            if(!merge(a1,n1,a2,n2,aa,nn))
                return -1;
            a1 = aa;
            n1 = nn;
        }
        Mod = n1;
        return (a1%n1+n1)%n1;
    }
    int64 a[1000],b[1000];
    int main()
    {
        int i;
        int k;
        int x;
        while(scanf("%d%d",&k,&x)!=EOF)
        {
            if(k==0&&x==0) break;
            for(i = 0; i < k; i++)
            {
                scanf("%I64d",&a[i]);
                b[i]=a[i]-x;
            }
            printf("%I64d ",China_Reminder2(k,b,a));
        }
        return 0;
    }

  • 相关阅读:
    iview表格render多元素封装
    iview表单语法
    vue实例,extend methods——实例属性 vue和jQuery.js一起使用
    vue.js基础__ extend 扩展选项
    vue.js基础__ mixins 选项
    vue.js基础__ watch 选项
    vue.js基础__ methods 选项
    vue.js基础__ computed 选项
    vue.js基础__ propsData 选项
    vue-cli, webpack + vue 目录结构解读
  • 原文地址:https://www.cnblogs.com/zhangdashuai/p/3702152.html
Copyright © 2011-2022 走看看