给定两个数a,b,若a>b,求解他们的最大公约数

方法1.试除法:由于最大公约数r满足1<=r<=b,并且有a%r=0,b%r=0。因此只要从r=b开始试除,若满足条件,则此时r为最大公约数,否则r自减1即可。若r自减到1,则1为最大公约数。

代码实现:

#include <stdio.h>int is_Gcd(int a,int b,int r)
{if (a % r == 0 && b % r == 0)return r;elsereturn is_Gcd(a,b,r-1);
}
int main()
{int a = 0;int b = 0;scanf("%d %d", &a, &b);int r= a<b?a:b;printf("%d和%d的最大公约数是%d",a,b,is_Gcd(a, b, r));return 0;
}

方法2.辗转相除法: 1.若a%b=0,显然,b为最大公约数。2.若a%b!=0,则令a=b,b=a%b,接着a%b,若a%b=0,则此时的b为最大公约数,否则令继续令a=b,b=a%b......如此循环往复,直到a%b=0,b为最大公约数。 即-若f(a,b)为a,b的最大公约数,a%b!=0且b%(a%b)!=0,则有f(a,b)=f(b,a%b)。

代码实现:

#include <stdio.h>int is_Gcd(int a,int b)
{if (a % b == 0)return b;elsereturn is_Gcd(b, a % b);
}
int main()
{int a = 0;int b = 0;scanf("%d %d", &a, &b);printf("%d和%d的最大公约数是%d", a, b, is_Gcd(a, b));return 0;
}

但是如果a<b怎么办呢,不难发现,若a<b,则传入a=b,b=a%b后,a和b的值恰好交换,因此此时代码执行逻辑也是没问题的。

方法3.更相减损术:1.判断它们是否都是偶数。若是,则用2约简,计数约简次数n;若不是则执行第二步。2.若a>b,则a-b=c,此时若b=c,则b*()为最大公约数。否则令a=max(b,c)  ,  b=min(b,c)  ,接着a-b=c.......直到满足b=c,此时b*()为最大公约数。

代码实现:

#include <stdio.h>
#include <math.h>
int is_Gcd2(int a,int b);//函数声明int is_Gcd1(int a,int b)
{float flag = 0;while (a % 2 == 0 && b % 2 == 0){a /= 2;b /= 2;flag++;}return (int)pow(2, flag) * is_Gcd2(a,b);
}
int is_Gcd2(int a, int b)
{if (a < b){int tmp = 0;tmp = a; a = b; b = tmp;}    //保证a>bif (b == a - b)return b;elsereturn is_Gcd2(b, a - b);
}
int main()
{int a = 0;int b = 0;scanf("%d %d", &a, &b);printf("%d和%d的最大公约数是%d", a, b, is_Gcd1(a, b));return 0;
}

补充:求解最小公倍数-若给定数字a,b ,其最大公约数为p,最小公倍数为q,有a*b=p*q。因此只需求解最大公约数,则可得最小公倍数

最大公约数的几种基本求解方法相关推荐

  1. 三种数值求解方法:FDM、FEM、FVM

    数值求解方法的基本思路是将连续的求解区域划分为一个个小区域,并在这些小区域中插入有限个离散的数据点,这些离散的数据点也可以称为节点.通过计算这些节点上的函数值来近似代替连续函数值,借助某种数学原理,将 ...

  2. 灰狼算法优化测试函数branin,测试函数的100种启发式算法求解方法之19

    灰狼算法优化测试函数Branin Branin函数是一个著名的全局优化函数,拥有三个全局最小值,比较特殊,是测试各种算法的一个较好的函数,测试效果好就能说明算法性能优异,参数设置合理,同时能检验一个程 ...

  3. 非线性最小二乘问题的求解方法(一)

    非线性最小二乘问题的求解方法(一) 1.非线性最小二乘问题 2.下降方法 2.1 梯度法 2.2 牛顿法 2.3 线性搜索 2.4 信赖域和阻尼算法 附录 Cholesky's method 本文仅仅 ...

  4. 三种算法求解最大公约数和最小公倍数

    1.穷举法 穷举法的基本思想是:根据题目的部分条件确定答案的大致范围,并在此范围内对所有可能的情况逐一验证,直到全部情况验证完毕.若某个情况验证符合题目的全部条件,则为本问题的一个解:若全部情况验证后 ...

  5. 二阶传递函数的推导及几种求解方法的比较

    二阶系统是指那些可用二阶微分方程描述的系统,其电路形式是由两个独立动态元器件组成的电路. 二阶系统电路包括二阶低通电路.二阶高通电路.二阶带通电路和二阶带阻电路. 下面分别给出以上二阶系统传递函数的推 ...

  6. 一种基于物理信息极限学习机的PDE求解方法

    **作者|**PINN山里娃,作者主页 **研究方向|**物理信息驱动深度学习 不确定性 人工智能 偏微分方程 极限学习机 该作者聚焦深度学习模型与物理信息结合前沿研究,提供了一系列AI for sc ...

  7. c语言实现求最大公约数的三种方法

    一.最大公约数 最大公因数,也称最大公约数.最大公因子,指两个或多个整数共有约数中最大的一个.a,b的最大公约数记为(a,b),同样的,a,b,c的最大公约数记为(a,b,c),多个整数的最大公约数也 ...

  8. 10种基于MATLAB的方程组求解方法

    线性方程组的求解包括直接法和迭代法,其中迭代法包括传统的高斯消元法,最速下降法,牛顿法,雅克比迭代法,共轭梯度法,以及智能启发式算法求解法和神经网络学习算法,传统算法可以相互组合改进,智能仿生启发式算 ...

  9. c语言 最大公约数 最小公倍数的编程,C语言三种算法求解最大公约数与最小公倍数...

    C语言三种算法求解最大公约数与最小公倍数 最大公约数与最小公倍数的求解是很多初学C的人所面临的一道问题.当然这道问题并不难解答,也有很多人已经写过相关的博客,我在此书写此篇博客,一是为了让自己能够夯实 ...

最新文章

  1. 专题 19 Makefile的使用
  2. 超实用:IIS 7.5修改WEB.CONFIG即可实现*.HTML伪静态
  3. 微软发布新Azure 媒体服务 API(V3),现已全面可用
  4. 华夏幸福产业研究院顾强:从极限通勤看都市圈规划与发展
  5. 小数点化分数的过程_分数和小数的互化
  6. 信息学奥赛一本通 1314:【例3.6】过河卒(Noip2002) | 1921:【02NOIP普及组】过河卒 | 洛谷 P1002 [NOIP2002 普及组] 过河卒
  7. jQuery----各版本
  8. 机械设计说明书_如何做机械设计课程设计?这篇文章总结很详细
  9. factorymenu什么意思_宏基20lsquo;显示屏AUTO和MENU是什么意思,在什么位置_已解决 - 阿里巴巴生意经...
  10. Servlet转发forward和重定向response.sendRedirect()区别
  11. 转:Secure CRT 中文乱码问题解决
  12. springboot集成logback配置文件模板
  13. 怎么查看文件的MD5码
  14. How to learn Japanese ?
  15. 二进制学习-反跟踪技术
  16. 如何提高公寓房屋出租率?
  17. Leo第一次练习跆拳道--Leo与跆拳道 1
  18. 华为5G模块MH5000-31资料全集5G技术论坛
  19. 网络地址转换--静态NAT
  20. IBM公司的企业管理

热门文章

  1. FME的ESRI Geodatabase (MDB)格式介绍(一)
  2. LabVIEW与Web通讯
  3. cod16与战网服务器连接中断,《使命召唤16》无法连接服务器怎么解决 服务器连接解决攻略...
  4. 中国软件,从繁荣走向文明
  5. java的web项目分工_JavaWeb中Servlet和JSP的分工案例
  6. 业务连续性方案概述【9】
  7. Linux常用备份恢复工具(1)
  8. 使用HTML创建表单
  9. Matlab 实现 数值计算方法 二分法
  10. 【AI实战】手把手教你深度学习文字识别(文字检测篇:基于MSER, CTPN, SegLink, EAST等方法)...