C++之 最大公约数求法
1、朴素法 2、更相减损算法 3、欧几里得算法(辗转相除法)
1、朴素法
①先判断两数a、b的大小,将较小值赋值给x
②判断a、b两数是否可以被x整除,可以,则输出x为最大公约数
③a、b不可以被x整除,则执行x-1,重复②③操作继续判断
#include <bits/stdc++.h>
using namespace std;
int main()
{int a,b,x;cin >> a >>b;x = min(a,b);while(x>1 && (a%x!=0 || b%x!=0))x--;cout << x <<endl;return 0;
}
2、更相减损法
①判断a,b两数是否是偶数,如果是就同时除以二
②一直除到有一方为奇数,或者两个都是奇数时,比较a,b大小,用大数减去小数,判断差和小数是否相等,如果不等,则继续用大数减小数
③如果差和减数相等,最大公约数=相等的数*(2^除以二的次数)
#include <bits/stdc++.h>
using namespace std;
int main(){int a, b, num=0,t;cin >> a >> b;if (a == b){cout << a << endl;return 0;}t=a,a = max(a, b), b = min(t, b);while ((a % 2 == 0) && (b % 2 == 0))a /= 2, b /= 2, num++;while (b != a - b)t=a-b,a = max(b, t), b = min(b, t);cout << b * (1<<num) << endl;return 0;
}
3、辗转相除法(欧几里得算法)降低了复杂度
①对a,b做求余(求模)运算,判断余数r1是否等于零
②r = 0,则a,b的最大公约数为b
③r != 0,则把之前b的值赋值给a,r的值赋值给b,再求一次余数,判断余数r,重复②③操作,直到r为零为止,此时的b就是最大公约数
#include<iostream>
using namespace std;
int main(){int a,b;cin>>a>>b;int r = a%b;while (r!=0){a = b;b = r;r = a%b;}cout<<b<<endl;return 0 ;
}
C++之 最大公约数求法相关推荐
- c语言中最大公约数的编程,C语言中最大公约数求法
从键盘输入两个整数,输出器最大公约数及最小公约数. 法一:穷举法 #include main() { int m,n,i; scanf("%d%d",&m,&n); ...
- 辗转相除法(欧几里得算法)求 最大公约数与最小公倍数+推论与证明。
首先我们规定:0不参与公约数和公倍数的讨论 先来讨论最大公约数: 最大公约数求法:两个数的所有公共质数相乘. 考虑三个问题. 为什么是公共的:公共代表这个数可以被两个数都整除 为什么是质数:合数一定能 ...
- 牛客网入门题--最大公约数与最小公倍数
公式:最大公约数=两数之积/最小公倍数:三者得二求一: 最小公倍数求法:输入a,b两数,用If语句判断出较大值,把较大值赋给i:再用for循环对较大值逐渐+1,直到找到符合((i%m==0)& ...
- C语言求最大公约数,最小公倍数
什么是约数 约数,又称因数.整数a除以整数b(b≠0) 除得的商正好是整数而没有余数,我们就说a能被b整除,或b能整除a.a称为b的倍数,b称为a的约数.-选自百度百科 通俗的理解就是18%2==0, ...
- 求最大公约数和最小公倍数算法
一.求最大公约数:欧几里德算法 欧几里德算法又称辗转相除法,用于计算两个正整数a,b的最大公约数 其计算原理依赖于下面的定理: 定理:两个整数的最大公约数等于其中较小的那个数和两数相除余数的最大公约数 ...
- c++语言最小公倍数怎么求,如何在C++中实现求两个整数的最大公约数和最小公倍数...
最大公约数: 如果有一个自然数a能被自然数b整除,则称a为b的倍数,b为a的约数.几个自然数公有的约数,叫做这几个自然数的公约数.公约数中最大的一个公约数,称为这几个自然数的最大公约数. 这个有几种方 ...
- C语言程序设计基础练习题
PTA上C语言程序设计练习题,包含 换硬币.水仙花数.最大公约数最小公倍数.高空坠球.猴子吃桃.兔子繁衍.出租车计价.三角形判断.简单计算器.平面向量加法. 这些题需要一些细节或思维. 1.换硬币: ...
- 天梯赛 L1_001-L1_020 集合
文章目录 天梯赛 L1-001 Hello World (5分) 输入样例: 输出样例: 答案: L1-002 打印沙漏 (20分) 输入格式: 输出格式: 输入样例: 输出样例: 答案: L1-00 ...
- C语言例题及解析(1)
目录 1排队等电梯 2.猜数字游戏 3.三个数按从大到小输出 方法一: 方法二(三目运算符): 4.最大公约数和最小公倍数 最大公约数 求法1 辗转相除法 最小公倍数 方法1 方法2(for循环) 1 ...
最新文章
- Dynamics 365 for CRM: Sitemap站点图的可视化编辑功能
- [deviceone开发]-Star分享的优惠券商户管理端App开源
- 机票预定系统类图_电商系统延时任务机制源码分享
- opencv-python教程学习系列13-图像平滑
- 2016校招腾讯研发岗笔试题---递归法求解格雷码
- ECMAScript 6入门 - 变量的解构赋值
- 数据库:如果MySQl磁盘满了,如何解决!
- nginx源码阅读(二).初始化:main函数及ngx_init_cycle函数
- UVA----10082 WERTYU【字符串】
- android应用程序架构由哪四个组成,android 应用程序结构是哪些
- [NOIp2013] 货车运输
- 【BZOJ4956】Secret Chamber at Mount Rushmore
- kafka和mqtt的区别和联系
- 2019Q1中高端人才报告:薪资TOP10,平均年薪超23万元
- 使用多个框架导致多个jar包包含同样的文件
- 【状压dp】【最短Hamilton路径】
- Linux命令学习系列-用户切换su,sudo
- PointCNN程序简介
- 秋招春招总结,经验分享(计算机专业)
- Python基础之文件和数据格式化