两个数的最大公约数是指能同时被他们整除的最大正整数。

两个数的最大公约数等于它们中 较小的数 和 两数之差 的最大公约数。

252和105的最大公约数是21(252 = 21 × 12;105 = 21 × 5);

252 − 105 = 147,所以147和105的最大公约数也是21;

147 − 105 = 63,所以105和63的最大公约数也是21;

105 − 63 = 42,所以63和42的最大公约数也是21;

63 − 42 = 21,所以42和21的最大公约数也是21;

42 − 21 = 21,所以21和21的最大公约数也是21;

21 − 21 =0,最后剩下21和0,所以252和105的最大公约数是21。

更相减损法


#include <iostream>
#include<cmath>
using namespace std;int main()
{int a,b,t;cin>>a>>b;t=abs(a-b);while(t!=0){a=b;b=t;t=abs(a-b);}cout<<b<<endl;return 0;
}

欧几里得(辗转相除法)
如果一个数是另一个数的几十倍甚至几千倍,一直做差非常麻烦(比如10000和10),这时求模运算,可以代替多次减数相同的差运算,直接得到最终需要的差值(如, 10000 % 10 =0)

非递归

#include <iostream>using namespace std;int main()
{int a,b,t;cin>>a>>b;while(a%b !=0){t=b;b=a%b;a=t;}cout<<b<<endl;return 0;
}

递归

#include <iostream>using namespace std;int gcd(int a,int b)
{if(a%b==0)return b;return gcd(b,a%b);}int main()
{int a,b;cin>>a>>b;cout<<gcd(a,b)<<endl;return 0;
}

穷举法(利用数学定义,也叫枚举法)
从两个数中较小数开始由大到小列举,直到找到公约数立即中断列举,得到的公约数便是最大公约数
找从0遍历到两者最小值,直到a,b均能被整除


#include <iostream>
#include<cmath>
using namespace std;int main()
{int a,b;cin>>a>>b;int  t = a>b ? b : a;                    while(t--){if (a%t == 0 && b%t == 0) break;}cout<<t<<endl;return 0;
}

最小公倍数,就是a b的乘积除以它们两个的最大公约数,就是它们的最小公倍数。

计算运行时间
头文件 #include<ctime>

clock_t startTime = clock();......clock_t endTime = clock();cout << "整个程序用时:"  << double(endTime - startTime) / CLOCKS_PER_SEC << "s" << endl;

如果程序运行时间连一毫秒都不要,那么最后显示的结果是 0s

C++ 求最大公约数 更相减损法 欧几里得算法 暴力穷举法相关推荐

  1. 求最大公约数(更相减损术)

    更相减损术:可半者半之,不可半者,副置分母.子之数,以少减多,更相减损,求其等也.以等数约之. 使用步骤: 第一步:任意给定两个正整数:判断它们是否都是偶数.若是,则用2约简:若不是则执行第二步.(可 ...

  2. C语言:求最大公约数-更相减损法(循环自定义函数的定义与调用)

    又是王老师的一道练习题: 任务描述 1.任意给定两个正整数:判断它们是否都是偶数.若是,则用2约简:若不是则执行第二步: 2.以较大的数减较小的数,接着把所得的差与较小的数比较,并以大数减小数.继续这 ...

  3. c语言最大公约数更相减损法,【C语言】最大公约数(更相减损法)和(辗转相除法)...

    #include #include /* 编写一个函数,传入a,b两个int类型的变量,返回两个值的最大公约数. 例如:输入传入(0 , 5)函数返回5,传入(10 , 9)函数返回1,传入(12 , ...

  4. jzoj3793,P2090-数字对【更相减损术,欧几里得算法,数论】

    正题 题目链接: https://www.luogu.org/problemnew/show/P2090 大意 一个数对(a,b),每次可以变为(a+b,b)或(a,a+b).然后要求一个数对中有n求 ...

  5. 更相减损术——Java实现

    Java作业--求最大公约数--更相减损术 虽然算法简单,但是因为很不熟练,所以一开始的代码有较多错误,以下是经过多次修改后的代码. 代码: import java.util.Scanner;publ ...

  6. 辗转相除法+更相减损法求最大公约数

    怎么求两个数的最大公约数呢? 简单的想法就是直接暴力枚举,试出最大公约数 #暴力枚举 #暴力枚举 def GCD(numberA,numberB):gcd=1for i in range(2,max( ...

  7. 初等数论--整除--欧几里得算法/辗转相除法/更相减损术

    初等数论--整除--欧几里得算法/辗转相除法/更相减损术 欧几里得算法/辗转相除法/更相减损术 博主本人是初学初等数论(整除+同余+原根),本意是想整理一些较难理解的定理.算法,加深记忆也方便日后查找 ...

  8. 《九章算术》中更相减损术----求最大公约数

    更相减损法:也叫更相减损术,是出自<九章算术>的一种求最大公约数的算法,它原本是为约分而设计的,但它适用于任何需要求最大公约数的场合. #include<stdio.h> in ...

  9. 求最大公约数和最小公倍数——辗转相除法(欧几里得算法)、更相减损术、stein算法

    辗转相除法-- 辗转相除法求最大公约数的原理: 两个整数其中较小的数 和 两数相除(较大数除较小数)的余数(使用递归)的最大公约数. 辗转相除法求最小公倍数的原理: 两个整数分别除以最大公约数的结果相 ...

最新文章

  1. Linux System Programming --Chapter Six
  2. 掉电引起的ORA-1172错误解决过程(二)
  3. mockito入门_Mockito入门
  4. 电脑出货量_Q3季度全球笔记本电脑出货量增长34%,惠普出货量首次超过联想
  5. IOS启程06—iOS设置圆角图片
  6. 制作属于自己的个人博客-超详细教程
  7. 【笔记】逻辑门图解—与门、或门、非门、与非门、或非门、异或门、同或门
  8. 【小旭学长-使用python进行城市数据分析】笔记篇(中)
  9. PJzhang:我发现一个有两个答案的数独题
  10. 不符合直接升级win11?教你怎么直接安装win11系统
  11. 《安全评估报告》7条回答范例
  12. 苏州大学 计算机网络,苏州大学计算机网络与通信期末考试卷-20210517192500.docx-原创力文档...
  13. 敬天爱人 大道至简——初读《经营十二条》
  14. Spring Boot 从入门到精通(一)HelloWorld(构建项目,热部署,测试)
  15. LFS学习系列3 — 前言
  16. Java代码给csv文件加水印_如何给CSV数据包的图片批量加上水印
  17. 关于visual studio安装失败的真正解决办法
  18. linux怎么发现和处理僵尸进程?
  19. 美团后台开发秋招面经汇总(更新至2021-08-13)
  20. AI Earth ——开发者模式案例8:利用Landsat-8数据进行地表温度反演

热门文章

  1. 安装nodejs和npm和tldr
  2. 计算机表格有多少列多少行,『Excle 2016最大行』Excel2016一张工作表包含多少行,多少列,多少单元格...
  3. 【Python】【实战】对 excel 某列进行统计,并按出现频率排序
  4. c语言中各种函数的作用,C语言常用函数用法大全
  5. 老手是如果教新手的(搞笑篇)
  6. 2017中国(海南)智慧城市创新大会举行
  7. jquery动态获取id
  8. mmorpg游戏,如何具体搭载游戏
  9. Android大量项目源码
  10. 用objectARX实现了一个复杂实体的Jig