CFF 1028 判断互质(求最大公约数),欧几里得算法,辗转相除法
来源:互联网 发布:如何免费申请邮箱域名 编辑:程序博客网 时间:2024/05/21 05:38
题目:
输入两个正整数m和n,判断m和n是否互质(即最大公约数为1),是则输出Yes,否则输出No。
输入输出:
输入两个整数m和n,中间用空格隔开。
如互质输出Yes,否则输出No。
样例:
36 56 No
7 9 Yes
数据范围:
1<=n,m<2^31
分析:
判断两个数是否互质,起始就是求它们的最大公约数,如果最大公约数为1,那么互质,否则,不是互质。
判断两个数是否互质,或者说求两个数的最大公约数,效率较高的是辗转相除法。
代码如下:
#include<iostream>using namespace std;int main(){ int m, n, r; cin>>m>>n; do{ r = m % n; m = n; n = r; } while(r != 0); if(m == 1){ cout<<"Yes"<<endl; } else { cout<<"No"<<endl; } return 0;}
我们来分析一下,比如我们输入的第一组数是7 和9,
那么运算过程如下:
r = m % n r = 7 % 9 = 7
m = n m = 9
n = r n = 7
while语句判断 r=7并不等于 0,所以继续执行循环体。
r = m % n r = 9 % 7 = 2
m = n m = 7
n = r n =2
while语句判断 r=2并不等于 0,所以继续执行循环体。
r = m % n r = 7 % 2 = 1
m = n m = 2
n = r n =1
while语句判断 r=1并不等于 0,所以继续执行循环体。
r = m % n r = 2 % 1 = 0
m = n m = 1
n = r n =0
此时判断 r = 0,所以结束循环。
最后一个被整除的数,是1,1赋值给了m,所以m就是它们的最大公约数。
当输入4和2时,运算过程如下:
r = m % n r = 4 % 2 = 0
m = n m = 2
n = r n =0
判断while语句,因为 r = 0,所以结束循环,所以2和4的最大公约
数就是m = 2
辗转相除法的算术原理:
在a = b*q + r 中,除数 b 和 r 能被同一个数整除,那么被除数也能
被这个数整除。
或者可以这么说,除数与余数的最大公约数,就是被除数和除数的最大公约数;如果反过来说,被除数与除数的最大公约数,就是除数与余数的最大公约数。
- CFF 1028 判断互质(求最大公约数),欧几里得算法,辗转相除法
- 欧几里得算法 --- 辗转相除法求最大公约数
- C语言辗转相除法求最大公约数(欧几里得算法)
- 欧几里得算法(辗转相除法)求最大公约数
- 辗转相除法(欧几里得)求最大公约数和最小公倍数
- 辗转相除法_欧几里得算法_java的实现(求最大公约数)
- [2016/7/11]判断两个正数是否互质:欧几里得算法(辗转相除法)
- 欧几里德算法(辗转相除法) 求最大公约数
- 求最大公约数-辗转相除法-欧几里德算法
- 欧几里得求最大公约数算法(辗转相除)
- 欧几里德算法(辗转相除法)求最大公约数和最小公倍数
- C++算法 - 辗转相除法(求最大公约数)
- C语言辗转相除法(欧几里德算法)求最大公约数
- 求最大公约数:欧几里德算法(即 辗转相除法 )
- 辗转相除法求最大公约数(最小公倍数)
- 求最大公约数(辗转相除法)
- 求最大公约数(辗转相除法)
- 求最大公约数-辗转相除法(Java)
- php静态缓存学习-1.使用php文件直接渲染保存静态html
- JS获取当前日期
- 百度地图API密钥
- slf4j-api、slf4j-log4j12以及log4j之间什么关系?
- 指针
- CFF 1028 判断互质(求最大公约数),欧几里得算法,辗转相除法
- 设计模式之工厂模式
- Scholar List
- Makefile-- make 运行
- 软件质量保证和测试不常见的问题
- js中this的理解
- ONVIF协议网络摄像机(IPC)客户端程序开发(6):使用gSOAP生成ONVIF框架代码
- leetcode 677. Map Sum Pairs
- SNMP