当前位置: 首页 > article >正文

裴蜀定理和扩展欧几里得定理

文章目录

  • 裴蜀定理
    • 什么是裴蜀定理
    • 裴蜀定理证明如下
    • 例题
      • 思路
      • 代码
  • 扩展欧几里得
    • 什么是扩展欧几里得定理
    • 扩展欧几里得证明如下
    • 模板
      • 例题
      • 思路
      • 代码

裴蜀定理

什么是裴蜀定理

若a,b为整数,且gcd(a,b)=d,那么对于任意的整数 x,y,ax + by 都一定是d的倍数,特别地,一定存在整数x,y,使 a x + b y = d成立。

裴蜀定理证明如下

在这里插入图片描述

例题

题目链接
![在这里插入图片描述](https://i-blog.csdnimg.cn/direct/ebcf6720b29a402691e5487adcec1c5c.png

思路

这个题我们可以把A看作系数,把X看作未知量,我们要求S最小正整数解,根据裴蜀定理可得,当S=gcd( A 1 A_1 A1, A 2 A_2 A2, A 3 A_3 A3,… A n A_n An)

代码

signed main()
{
	IOS
	int T=1;
	//cin>>T;
	while(T--)
	{
		int n;
		cin>>n;
		for(int i=1;i<=n;i++)
		cin>>a[i];
		int t=a[1];
		for(int i=1;i<=n;i++)
		{
			t=__gcd(t,abs(a[i]));
		}
		cout<<t<<endl;
	}
	return 0;
}

扩展欧几里得

什么是扩展欧几里得定理

扩展欧几里得算法(英语:Extended Euclidean algorithm)是欧几里得算法(又叫辗转相除法)的扩展。已知整数a、b,扩展欧几里得算法可以在求得a、b的最大公约数的同时,能找到整数x、y(其中一个很可能是负数),
使它们满足贝祖等式 ax + by = gcd(a,b)(裴蜀定理)
如果a是负数,可以把问题转化成|a|(-x)+by = gcd(|a|,b) ,然后令x’=(-x)。
通常谈到最大公约数时,我们都会提到一个非常基本的事实:给予二个整数a、b,必存在整数x、y使得ax + by = gcd(a,b)。
有两个数a,b,对它们进行辗转相除法,可得它们的最大公约数——这是众所周知的。然后,收集辗转相除法中产生的式子,倒回去,可以得到ax+by=gcd(a,b)的整数解。
扩展欧几里得算法可以用来计算模反元素(也叫模逆元),而模反元素在RSA加密算法中有举足轻重的地位。

扩展欧几里得证明如下

在这里插入图片描述

模板

#include <bits/stdc++.h>
#define lowbit(x) ((x)&(-x))
#define int long long
#define endl '\n'
#define PII pair<int,int> 
#define IOS ios::sync_with_stdio(0),cin.tie(0),cout.tie(0);
using namespace std;
int exgcd(int a,int b,int &x,int &y)
{
	if(b==0){
		x=1,y=0;
		return a;
	}
	int x1,y1,d;
	d=exgcd(b,a%b,x1,y1);
	x=y1,y=x1-a/b*y1;
	return d;
}
signed main()
{
	IOS
	int T=1;
	//cin>>T;
	while(T--)
	{
		int x,y;
		int t=exgcd(8,6,x,y);
		cout<<x<<" "<<y<<endl;
	}
	return 0;
}

例题

题目链接
在这里插入图片描述

思路

可以把同余方程转换成不定方程,用扩展欧几里得算法求出x,再判断x是否为最小正整数解就行了

代码

int exgcd(int a,int b,int &x,int &y)
{
	if(b==0)
	{
		x=1,y=0;
		return a;
	}
	int x1,y1,d;
	d=exgcd(b,a%b,x1,y1);
	x=y1,y=x1-a/b*y1;
	return d;
}
signed main()
{
	IOS
	int T=1;
	//cin>>T;
	while(T--)
	{
		int x,y,a,b,t;
		cin>>a>>b;
		int d=exgcd(a,b,x,y);
		int q=(x % b + b) % b;;
		cout<<q<<endl;
	}
	return 0;
}

http://www.kler.cn/a/453275.html

相关文章:

  • 解决 vue3 中 echarts图表在el-dialog中显示问题
  • 使用ForceBindIP绑定应用到指定IP
  • 重温设计模式--观察者模式
  • linux创建虚拟串口
  • 教育行业 UI 设计基础篇:简洁直观的风格打造
  • MyBatis-Plus分页拦截器,源码的重构(重构total总数的计算逻辑)
  • 工业金融政务数据分类分级体系建设解读
  • WEB 漏洞 - 文件包含漏洞深度解析
  • Python+OpenCV系列:【打卡系统-工具模块设计】工具模块深度揭秘,考勤智能化的核心秘籍!
  • 无影云电脑的高性能与便捷性
  • 评估大语言模型在药物基因组学问答任务中的表现:PGxQA
  • 菜鸟带新鸟——基于EPlan2022的部件库制作(3D)
  • ubuntu 网络管理--NetworkManager
  • 硬件设计:LVDS电平标准
  • 抖音小程序登录(前端通过tt.login获取code换取openId)
  • 生成10级子目录,每个子目录下有100个不同大小的文件
  • 将现有环境192.168.1.100中的svn迁移至新服务器192.168.1.4;
  • 项目管理咨询公司专注于为各类项目提供全方位的管理咨询服务
  • K8S--“ Failed to create pod sandbox: nameserver list is empty“
  • Jmeter下载安装配置教程(多版本)
  • 【目标跟踪+人流计数+人流热图(Web界面)】基于YOLOV11+Vue+SpringBoot+Flask+MySQL
  • Java 23和JDK 23详细安装方法,常用命令使用等
  • 安卓端侧大模型MLC-LLM部署全攻略:以InternLM2.5-1.8B为例
  • 任务8 数据库服务配置与管理
  • 力扣面试题 39 - 三步问题 C语言解法
  • 遗传萤火虫算法的原理