您的位置:首页 > 编程语言

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

2017-07-13 22:26 489 查看
#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);
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: