欧几里得算法和扩展欧几里得算法

欧几里得算法基本原理和证明

代码实现:

#include<iostream>
using namespace std;
int gcd(int a,int b){
	return b?gcd(b,a%b):a;
}
int main(){
	int x,y;
	cin>>x>>y;
	cout<<gcd(x,y)<<endl;
	return 0;
}

扩展欧几里得算法原理

代码实现:

#include<iostream>
using namespace std;
int exgcd(int a,int b,int &x,int &y){
	if(b==0){
		x=1,y=0;
		return a;
	}
	int res=exgcd(b,a%b,y,x);
	y=y-(a/b)*x;
	return res;
}
int main(){
	int t;
	cin>>t;
	while(t--){
		int a,b,x,y;
		cin>>a>>b;
		exgcd(a,b,x,y);
		cout<<x<<" "<<y<<endl;
	}
	return 0;
}

扩展欧几里得算法的应用:

代码实现:

#include<iostream>
using namespace std;
int exgcd(int a,int b,int &x,int &y){
	if(b==0){
		x=1,y=0;
		return a;
	}
	int t=exgcd(b,a%b,y,x);
	y-=a/b*x;
	return t;
}
int main(){
	int t;
	cin>>t;
	while(t--){
		int a,b,m,x,y;
		cin>>a>>b>>m;
		int res=exgcd(a,m,x,y);
		if(b%res)cout<<"impossible"<<endl;
		else cout<<x*(b/res)%m<<endl; //由于题目要求答案必须在int范围内,故需要进行取模操作
	}
	return 0;
}

 

posted @   回忆、少年  阅读(9)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 单线程的Redis速度为什么快?
· 展开说说关于C#中ORM框架的用法!
· Pantheons:用 TypeScript 打造主流大模型对话的一站式集成库
· SQL Server 2025 AI相关能力初探
· 为什么 退出登录 或 修改密码 无法使 token 失效
点击右上角即可分享
微信分享提示