记录一下中国剩余定理的代码

来源:互联网 发布:软件测试实践报告 编辑:程序博客网 时间:2024/05/16 10:43
#include <stdio.h>#include<iostream>using namespace std;#define  ll long long/*int exgcd(int a,int b,int &x ,int &y){    int d;    if(b==0)    {        d=a;        x=1;        y=0;    }    else    {        d=exgcd(b,a%b,y,x);        y=y-(a/b)*x;    }    return d;}*/void exgcd(int a, int b, int &x, int &y){    //根据欧几里德定理    if(b == 0){//任意数与0的最大公约数为其本身。        x = 1;        y = 0;    }else{        int x1, y1;        exgcd(b, a%b, x1, y1);        if(a*b < 0){//异号取反            x = - y1;            y = a/b*y1 - x1;        }else{//同号            x = y1;            y = x1 - a/b* y1;        }    }}int main(){    int n;    int a[11];    int m[11];    scanf("%d",&n);    int mm=1;    for(int i=1;i<=n;i++)    {        scanf("%d %d",&a[i],&m[i]);        mm*=a[i];    }    int ans=0;    for(int i=1;i<=n;i++)    {        int x,y;        exgcd(mm/a[i],-a[i],x,y);        ans+=mm/a[i]*x*m[i];    }    printf("%d",(ans+mm)%mm);}

原创粉丝点击