FZU 1402 猪的安家 中国剩余定理

Posted legend_PawN

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了FZU 1402 猪的安家 中国剩余定理相关的知识,希望对你有一定的参考价值。

FZU1402

中国剩余定理的模版题,注意在CRT过程中及时取模,防止在
M=m[1]m[2]m[3] 的过程中发生乘法的溢出

AC代码:

#include <iostream>
#include <cstdio>
#include <cstring>
typedef __int64 int64;
using namespace std;
int64 b[15],m[15]; //同余方程组 x=b[i] (mod m[i])
int64 ex_gcd(int64 a,int64 b,int64 &x,int64& y)
    if(a==0 && b==0)
        return -1;
    
    if(b==0)
        x=1;y=0;return a;
    
    int64 d=ex_gcd(b,a%b,y,x);
    y-=a/b*x;
    return d;

int64 China_Reminder(int len,int64 b[],int64 m[])
    int64 M=1;
    int64 res=0;
    for(int i=0;i<len;i++)
        M=M*m[i];
    for(int i=0;i<len;i++)
        int64 a=M/m[i];
        int64 x,y;
        ex_gcd(a,m[i],x,y);
        x=(x%m[i]+m[i])%m[i];  //求乘法逆元,取最小正整数解
        res=(res+a*b[i]*x%M)%M;
    
    return res;

int main()
    int n;
    //freopen("input.txt","r",stdin);
    while(~scanf("%d",&n))
        memset(b,0,sizeof(b));
        memset(m,0,sizeof(m));
        for(int i=0;i<n;i++)
            scanf("%I64d%I64d",&m[i],&b[i]);
        printf("%I64d\\n",China_Reminder(n,b,m));
    

以上是关于FZU 1402 猪的安家 中国剩余定理的主要内容,如果未能解决你的问题,请参考以下文章

搞搞中国剩余定理和它的扩展

什么叫中国剩余定理

简述中国剩余定理

中国剩余定理过程

什么叫中国剩余定理

中国剩余定理与扩展中国剩余定理