• 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;
    }

  • 相关阅读:
    去掉影响美观的横滚动条
    Visio绘制事件分解图
    Visio绘制系统图
    asp.net与js中字符串的HTML编码与解码
    《ERP从内部集成起步》读书笔记——第一章 Garthner公司是如何提出ERP的 1.1尊重历史
    Asp.net页面传参数给Silverlight
    Gridview中格式化数据的方法
    让silverlight不在最顶层,可以在悬浮层之下
    DateTime类型中 DayOfWeek时的英文如何转换成中文(转)
    Asp.net页面中通过Js控制Silverlight显示值
  • 原文地址:https://www.cnblogs.com/zhangdashuai/p/3702152.html
Copyright © 2020-2023  润新知