中国剩余定理 12@亿万星辰


#include <bits/stdc++.h>
using namespace std;
#define MAX 100000
int ex_gcd(int a,int b,int &x,int &y)//扩展欧几里得定理 
{
	int d;
	if(b==0){
		x=1;
		y=0;
		return a;
	}
	d=ex_gcd(b,a%b,y,x);
	y-=a/b*x;
	return d;
}
int Chinese_Remainder(int a[],int prime[],int len)//中国剩余定理 
{
	int m=1,M,R,y,d,sum=0;
	for(int i=1;i<=len;i++) m*=prime[i];
	for(int i=1;i<=len;i++){
		M=m/prime[i];
		d=ex_gcd(M,prime[i],R,y);//求出最大公约数和a的逆元R 
		sum=(sum+a[i]*M*R)%m;//求∑(Rj*Mj)*aj  %m 
	}
	return (m+sum%m)%m;
} 
int main()
{
	int a[MAX],m[MAX],ant=0,x,b,d;
	while(scanf("%d",&b)!=0&&scanf("%d",&d)!=0&&b!=0){//赋值输入0 0时结束 
		++ant;
		a[ant]=d,m[ant]=b;
	}
	x=Chinese_Remainder(a,m,ant);
	printf("%d\n",x);
	return 0;
}
中国剩余定理和扩展欧几里得定理



全部评论

相关推荐

点赞 评论 收藏
分享
但听说转正率很低,我现在有在实习了,好纠结要不要去
熬夜脱发码农:转正率低归低,但是实习的经历你可以拿着,又不是说秋招不准备了
点赞 评论 收藏
分享
Yki_:你要算时间成本呀,研究生两三年,博士三四年,加起来就五六年了,如果你本科去腾讯干五年,多领五年的年薪,加上公司内涨薪,可能到时候十五年总薪资也跟博士差不多
点赞 评论 收藏
分享
点赞 评论 收藏
分享
不愿透露姓名的神秘牛友
06-30 18:19
点赞 评论 收藏
分享
评论
1
收藏
分享

创作者周榜

更多
牛客网
牛客网在线编程
牛客网题解
牛客企业服务