欧几里德求最大公约数(辗转相除法)
来源:互联网 发布:capvision凯盛 知乎 编辑:程序博客网 时间:2024/04/30 03:07
定理:Gcd(m,n)=Gcd(n,m mod n)
证明:对于任何正整数a,b。如果a>b,都有a=k*b+r 即r=a-k*b => r=a mod b.
假设d为a,b的公约数,则a=a1*d,b=b1*d。
而r=a1*d-k*b1*d=(a1-k*b1)*d => d也是r的约数 => d也是(a,r)的公约数
则说明(a,b)的公约数也就是(b,r)的公约数。因此gcd(a,b)=gcd(b,a mod b)。
#include <cstdio>#include <cstring>#include <iostream>using namespace std;int Gcd(int m,int n){int temp;while(n){//若m<n,第一次循环把m,n交换temp=m%n;m=n;n=temp;}return m;}int main(){int m,n;while(cin>>m>>n)cout<<Gcd(m,n);return 0;}另外:两个数a,b的最大公倍数为a*b/Gcd(a,b)
另一种求最大公约数的方法:辗转相减法
#include <cstdio>#include <cstring>#include <iostream>using namespace std;int Gcd(int m,int n){int temp;if(m<n) swap(m,n);while(n){if(m<n) swap(m,n);temp=m-n;m=n;n=temp;}return m;}int main(){int m,n;while(cin>>m>>n)cout<<Gcd(m,n)<<'\n';return 0;}
1 0
- 欧几里德算法(辗转相除法) 求最大公约数
- 求最大公约数-辗转相除法-欧几里德算法
- 欧几里德求最大公约数(辗转相除法)
- 欧几里德算法(辗转相除法)求最大公约数和最小公倍数
- 欧几里德算法(辗转相除法):求两个整数最大公约数
- C语言辗转相除法(欧几里德算法)求最大公约数
- 求最大公约数:欧几里德算法(即 辗转相除法 )
- 最大公约数欧几里德算法(辗转相除法)
- 辗转相除法求最大公约数
- 辗转相除法求最大公约数
- 辗转相除法求最大公约数
- 辗转相除法求最大公约数
- 求最大公约数-辗转相除法
- 辗转相除法求最大公约数
- 辗转相除法求最大公约数
- 【辗转相除法求最大公约数】
- 辗转相除法求最大公约数
- 辗转相除法求最大公约数
- Android Hybird 原生和网页通讯框架实践
- ABAP解析XML的示例程序,COPY可运行
- 接口的作用
- 05-Ubuntu开发proc/c++
- HashMap和HashSet的区别
- 欧几里德求最大公约数(辗转相除法)
- session 和 coonkie 的区别于联系
- debian 下设置documentRoot项目目录
- linux通过端口号查找程序执行路径
- Java集合---ArrayList的实现原理
- 画PCB时的注意点
- iis 配置后外网不能访问的解决方法
- 【微信小程序常见问题】不在以下合法域名列表解决方案
- XML-ABAP处理