数论——最大公因数
最大公因数#
如果,而且是的共同因数中最大的那个,则称u是ab
的最大公因数,记作。
- 则互素。
- 对于,若则它们两两互素。
辗转相除法#
辗转相除法应该都学过,我们主要说它的数学原理。在这之前先看看算法。
这个就是最大公因数。
辗转相除的意思就是,如果能被整除,那么同样也能被整除。所以(a,b)=(b,r)。所以只要不断地递归求余,最后一个余数就是最大公因数。
下面给出C++实现。
// a must > b
int gcd(int a,int b){
int r;
while(r!=0){
r=a%b;
a=b;
b=r;
}
return a;
}
int main(){
cout << gcd(20,15) << endl;
}
辗转相除的意思就是,如果能被整除,那么同样也能被整除。所以只要不断地递归求余,最后一个余数必是最大公因数。
证明
素因式分解#
对于每个数,都能分解成若干个素因数的乘积。在找的时候,如果我们把分解成若干素因数的乘积,那么对寻找最大公因数有些帮助。
然后我们分别取每个素因数里指数最小的那个(必要时可以出现零指数),并乘起来,结果就是最大公因数。
给出一般公式
使用素因式分解还能寻找最小公倍数。
最小公倍数#
如果,,并且是所有满足的整数中最小的那个,就称为的最小公倍数,记作。
如。
素因式分解找最小公倍数#
对于最小公倍数,我们只需要选择素因子列表中指数比较大的那个就好了。
举个例子
最大公因数和最小公倍数之间的线性关系#
使用素因数分解法不太适合计算机,辗转相除比较适合计算机,所以求解最小公倍数可以利用这个线性关系。
//lcm是最小公倍数 gcd是使用辗转相除法实现的最大公因数
function lcm(a,b)
tmp = gcd(a,b)
return a*b/tmp
最大公因数线性组合表示#
最大公因数总可以以线性组合的方式表示
作者:Yudoge
出处:https://www.cnblogs.com/lilpig/p/13768225.html
版权:本作品采用「署名-非商业性使用-相同方式共享 4.0 国际」许可协议进行许可。
欢迎按协议规定转载,方便的话,发个站内信给我嗷~
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
· 基于Microsoft.Extensions.AI核心库实现RAG应用
· Linux系列:如何用heaptrack跟踪.NET程序的非托管内存泄露
· 开发者必知的日志记录最佳实践
· SQL Server 2025 AI相关能力初探
· 震惊!C++程序真的从main开始吗?99%的程序员都答错了
· 【硬核科普】Trae如何「偷看」你的代码?零基础破解AI编程运行原理
· 单元测试从入门到精通
· winform 绘制太阳,地球,月球 运作规律
· 上周热点回顾(3.3-3.9)