最大公约数的四种求法

  • 第一种(暴力法)
  • 第二种(短除法)
  • 第三种(辗转相除法递归)
  • 第四种(辗转相除法非递归)

第一种(暴力法)

思路:取a、b两个数,再取一个变量i,变量i的初始值为1,从1开始遍历到a和b中小的那个数,每一次i递增的时候都用a和b除以i,找到最后能够同时整除那个数,就是最大公约数。

代码

import java.util.Scanner;/*** @Param a,b :求它们两个的最大公约数  gcd :最大公约数值* @Author 小李同学* @Date 2021/1/20 20:42* @return 无* @description 最大公约数:暴力解法*/
public class test1 {public static void main(String[] args) {//第一种:暴力解决Scanner sc = new Scanner(System.in);int a = sc.nextInt();int b = sc.nextInt();int gcd = 1;for (int i = 2; i <= (a > b ? b : a); i++) {if (a % i == 0 && b % i == 0) {gcd = i;}}System.out.println("最大公约数为:" + gcd);}
}

第二种(短除法)

思路:把a和b分解质因数,再把各数中的全部公有质因数提取出来连乘,所得的积就是最大公约数。

例如:求24和60的最大公约数,先分解质因数,得24=2×2×2×3,60=2×2×3×5,24与60的全部公有的质因数是2、2、3,它们的积是2×2×3=12,12就是24和60的最大公约数。

代码

import java.util.Scanner;/*** @Param a,b :求它们两个的最大公约数  gcd :最大公约数值* @Author 小李同学* @Date 2021/1/20 20:56* @return 无* @description 最大公约数:短除法*/
public class test2 {public static void main(String[] args) {//第二种:短除法Scanner sc = new Scanner(System.in);int a = sc.nextInt();int b = sc.nextInt();int gcd = 1;for (int i = 2; i <= (a > b ? b : a); i++) {while (a % i == 0 && b % i == 0) {gcd = gcd * i;a = a / i;b = b / i;}}System.out.println("最大公约数为:" + gcd);}
}

第三种(辗转相除法递归)

思路:用较大数除以较小数,再用出现的余数(第一余数)去除除数,再用出现的余数(第二余数)去除第一余数,如此反复,直到最后余数是0为止,最后的除数就是这两个数的最大公约数。

代码

import java.util.Scanner;/*** @Param a,b :求它们两个的最大公约数  gcd :最大公约数值* @Author 小李同学* @Date 2021/1/20 21:03* @return gcd(a,b) :int* @description 最大公约数:辗转相除法(递归)*/
public class test3 {public static void main(String[] args) {//第三种:辗转相除法(递归)Scanner sc = new Scanner(System.in);int a = sc.nextInt();int b = sc.nextInt();int gcd = gcd(a, b);System.out.println("最大公约数为:" + gcd);}public static int gcd(int a, int b) {if (b == 0) {return a;} else {int c = b;b = a % b;a = c;return gcd(a,b);}}
}

第四种(辗转相除法非递归)

代码

import java.util.Scanner;/*** @Param a,b :求它们两个的最大公约数  gcd :最大公约数值* @Author 小李同学* @Date 2021/1/20 21:16* @return 无* @description 最大公约数:辗转相除法(非递归)*/
public class test4 {public static void main(String[] args) {//第四种:辗转相除法(非递归)Scanner sc = new Scanner(System.in);int a = sc.nextInt();int b = sc.nextInt();int c = 1;while (b != 0) {c = b;b = a % b;a = c;}System.out.println("最大公约数:" + a);}
}

最大公约数的四种求法(暴力、短除法、辗转相除法递归和非递归)相关推荐

  1. 最大公约数的四种方法

    最大公约数的四种方法 前言 1.暴力穷举法 2.辗转相除法 步骤 原理 证明: 3.更相减损法 步骤 原理 证明: 比较 4.stein算法 比较 原理 步骤 前言 求两数的最大公约数,一共有四种方法 ...

  2. 最大公约数的四种算法

    一.题目分析 运行最大公约数的常用算法,并进行程序的调式与测试,要求程序设计风格良好,并添加异常处理模块(如输入非法等).用四种方法进行运算. 1.辗转相除法: 其算法过程为:设两数为a,b设其中a ...

  3. c语言中fact函数怎么调用,C语言程序题: 1、编写一个求n!的函数fact(n),要求fact函数分别用递归和非递归两种方法实现...

    点击查看C语言程序题: 1.编写一个求n!的函数fact(n),要求fact函数分别用递归和非递归两种方法实现具体信息 答:int fac(int n) //非递归{int f=1; for(;n;) ...

  4. 二叉树的几种递归和非递归式遍历:

    二叉树的几种递归和非递归式遍历: 1 #include <fstream> 2 #include <iostream> 3 4 using namespace std; 5 6 ...

  5. C语言/C++常见习题问答集锦(六十四) 之兔子繁殖(递归与非递归)

    C语言/C++常见习题问答集锦(六十四) 之兔子繁殖(递归与非递归) 程序之美 1.C语言,计算1乘以3×5*-乘n的积,并输出结果,n值由键盘接收. #include<stdio.h>v ...

  6. 二叉树的三种遍历方式(递归、非递归和Morris遍历)

    二叉树的三种遍历方式(递归.非递归和Morris遍历) 原文:http://www.linuxidc.com/Linux/2015-08/122480.htm 二叉树遍历是二叉树的最基本的操作,其实现 ...

  7. 【笔记|C++】最大公约数、最小公倍数的四种求法

    前言 Hello!小伙伴! 非常感谢您阅读海轰的文章,倘若文中有错误的地方,欢迎您指出-   自我介绍 ଘ(੭ˊᵕˋ)੭ 昵称:海轰 标签:程序猿|C++选手|学生 简介:因C语言结识编程,随后转入计 ...

  8. 最大公约数的三种求法——(C语言)

    如何求解最大公约数,首先了解什么是最大公约数,如果有一个自然数a能被自然数b整除,则称a为b的倍数,b为a的约数.几个自然数公有的约数,叫做这几个自然数的公约数.公约数中最大的一个公约数,称为这几个自 ...

  9. 一文搞定最大公约数(四种方法,赋原理和比较,超详细解答)

    最大公约数 前言 1.暴力穷举法 代码 2.辗转相除法 步骤 原理 代码 3.更相减损法 步骤 原理 代码 比较 4.stein算法 比较 运算符 & 移位操作符 原理 步骤 代码 前言 求两 ...

  10. 求最大公约数的四种算法

    一. 题目分析 如果有一个自然数a能被自然数b整除,则称a为b的倍数,b为a的约数.几个自然数公有的约数,叫做这几个自然数的公约数.公约数中最大的一个公约数,称为这几个自然数的最大公约数. 根据约数的 ...

最新文章

  1. 【完整代码】Scala akka入门示例
  2. 计算机任务驱动法教学应用,任务驱动教学法在计算机教学中的应用
  3. CSS3 Media Queries在iPhone4和iPad上的运用
  4. 图谱(学习地图)系列总结,持续更新中
  5. 人工智能与大数据的完美结合 1
  6. c语言屏蔽按键,VC实现让关闭按钮成灰色不可用的方法
  7. Qt:QListWidget的item上实现右键菜单
  8. python getopterror_python getopt抛出getopterror选项——mode不能有参数
  9. python jupyter
  10. 车牌识别程序_在线的,离线的车牌识别
  11. 数据增广Data Augmentation 动手学深度学习v2
  12. 以下可以作为C语言标识符的是( ),天津市计算机二级C语言选择题
  13. python 病毒 基因_#Python#提取基因对应的蛋白质名
  14. react组件书写规范
  15. 实验6、灰盒测试实验
  16. 【网络原理7】认识HTTP
  17. android o 红米4x,Redmi新机开始预热,会不会是年度最佳游戏手机?
  18. 关于电商秒杀系统中防超卖、以及高性能下单的处理方案简述
  19. Android LiveData crash: Cannot add the same observer with different lifecycles
  20. 电力监控系统在城市轨道交通变电所自动化中的应用

热门文章

  1. 人工客服行业遭重创,背后支撑的力量
  2. java线程 stop()_Java中的线程Thread方法之---stop()
  3. AOJ-AHU-OJ-5 渊子赛马
  4. 2019京东全球科技探索者大会议程抢先曝光!
  5. Ubuntu简单部署QQ聊天机器人ATRI
  6. clock skew detected on
  7. Moodle导入CSV文件格式的试题
  8. 蓝桥杯嵌入式总结(KEY配置_按键扫描(三行代码)_矩阵按键_GPIO口输入和输出类型)
  9. B. Frodo and pillows
  10. 虚拟机Linux共享主机Windows文件夹