(扩展)欧几里得算法、裴蜀定理(贝祖定理)

题目链接

acwing3642. 最大公约数和最小公倍数
acwing877. 扩展欧几里得算法
P4549 【模板】裴蜀定理


裴蜀定理:

  1. 对于任意整数 a,b,存在一对整数 x,y, 满足 ax+by=gcd(a,b)
  2. ax+by=c,xZ,yZ 成立的充要条件是gcd(a,b)|cZ表示正整数集。

acwing3642. 最大公约数和最小公倍数

题目描述

输入两个正整数 mn,求其最大公约数和最小公倍数。

输入格式

一行,两个整数 mn

输出格式

一行,输出两个数的最大公约数和最小公倍数。

数据范围

1n,m10000

输入样例:

5 7

输出样例:

1 35

代码

  • 时间复杂度:O(log(a+b))

递归

#include<bits/stdc++.h> using namespace std; int gcd(int a,int b) { return b?gcd(b,a%b):a; } int main() { int n,m; scanf("%d%d",&n,&m); printf("%d %d",gcd(n,m),n*m/gcd(n,m)); return 0; }

非递归

#include<bits/stdc++.h> using namespace std; int main() { int n,m; scanf("%d%d",&n,&m); int tmp=n*m; while(m^=n^=m^=n%=m); printf("%d %d",n,tmp/n); return 0; }

acwing877. 扩展欧几里得算法

题目描述

给定 n 对正整数 ai,bi,对于每对数,求出一组 xi,yi,使其满足 ai×xi+bi×yi=gcd(ai,bi)

输入格式

第一行包含整数 n

接下来 n 行,每行包含两个整数 ai,bi

输出格式

输出共 n 行,对于每组 ai,bi,求出一组满足条件的 xi,yi,每组结果占一行。

本题答案不唯一,输出任意满足条件的 xi,yi 均可。

数据范围

1n105,1ai,bi2×109

输入样例:

2 4 6 8 18

输出样例:

-1 1 -2 1

代码

  • 时间复杂度:O(log(a+b))
#include<bits/stdc++.h> using namespace std; int exgcd(int a,int b,int &x,int &y) { if(b==0) { x=1,y=0; return a; } int d=exgcd(b,a%b,x,y); int z=x; x=y,y=z-y*(a/b); return d; } int main() { int t; for(scanf("%d",&t);t;t--) { int a,b,x,y; scanf("%d%d",&a,&b); exgcd(a,b,x,y); printf("%d %d\n",x,y); } return 0; }

[P4549 【模板】裴蜀定理]

题目描述

给定一个包含 n 个元素的整数序列 A,记作 A1,A2,A3,...,An

求另一个包含 n 个元素的待定整数序列 X,记 S=i=1nAi×Xi,使得 S>0S 尽可能的小。

输入格式

第一行一个整数 n,表示序列元素个数。

第二行 n 个整数,表示序列 A

输出格式

一行一个整数,表示 S>0 的前提下 S 的最小值。

输入

2 4059 -1782

输出

99

说明/提示

对于 100% 的数据,1n20|Ai|105,且 A 序列不全为 0

代码

  • 时间复杂度:O(log(ai))
#include<bits/stdc++.h> using namespace std; int main() { int n,res,other; scanf("%d%d",&n,&res); while(--n) { scanf("%d",&other); res=__gcd(res,other); } printf("%d",abs(res)); return 0; }

__EOF__

本文作者acwing_zyy
本文链接https://www.cnblogs.com/zyyun/p/15315097.html
关于博主:评论和私信会在第一时间回复。或者直接私信我。
版权声明:本博客所有文章除特别声明外,均采用 BY-NC-SA 许可协议。转载请注明出处!
声援博主:如果您觉得文章对您有帮助,可以点击文章右下角推荐一下。您的鼓励是博主的最大动力!
posted @   zyy2001  阅读(120)  评论(0编辑  收藏  举报
编辑推荐:
· SQL Server 2025 AI相关能力初探
· Linux系列:如何用 C#调用 C方法造成内存泄露
· AI与.NET技术实操系列(二):开始使用ML.NET
· 记一次.NET内存居高不下排查解决与启示
· 探究高空视频全景AR技术的实现原理
阅读排行:
· 阿里最新开源QwQ-32B,效果媲美deepseek-r1满血版,部署成本又又又降低了!
· 单线程的Redis速度为什么快?
· SQL Server 2025 AI相关能力初探
· AI编程工具终极对决:字节Trae VS Cursor,谁才是开发者新宠?
· 展开说说关于C#中ORM框架的用法!
点击右上角即可分享
微信分享提示