求两个整数的最大公约数GCM
思路分析:
(1)求差判定法:
如果两个数相差不大,可以用大数减去小数,所得的差与小数的最大公约数就是原来两个数的最大公约数.例如:求78和60的最大公约数.78-60=18,18和60的最大公约数是6,所以78和60的最大公约数是6.
如果两个数相差较大,可以用大数减去小数的若干倍,一直减到差比小数小为止,差和小数的最大公约数就是原来两数的最大公约数.
例如:求92和16的最大公约数.92-16=76,76-16=60,60-16=44,44-16=28,28-16=12,12和16的最大公约数是4,
所以92和16的最大公约数就是4.
(2)辗转相除法:
当两个数都较大时,采用辗转相除法比较方便.其方法是:
以小数除大数,如果能整除,那么小数就是所求的最大公约数.否则就用余数来除刚才的除数;再用这新除法的余数去除刚才的余数.
依此类推,直到一个除法能够整除,这时作为除数的数就是所求的最大公约数.
例如:求4453和5767的最大公约数时,可作如下除法.
5767÷4453=1余1314
4453÷1314=3余511
1314÷511=2余292
511÷292=1余219
292÷219=1余73
219÷73=3
于是得知,5767和4453的最大公约数是73.
核心思路就是:算法的核心思想就是大数除小数,如果得出来的数有余数,把这个余数做为下一次的除数,上一次的除数做为被除数,直到最后相除的余数为0,则除数即为最大公约数。
/**
* 采用递归法实现求两个数的最大公约数
*/
public static int GCM(int a, int b) {
int max, min;
max = a > b ? a : b;
min = a < b ? a : b; if (max % min == 0)
return min;
else
return GCM(min, max % min);
} /**
* 采用非递归方法实现求两个数的最大公约数
*/
public static int GCM1(int a, int b) {
int max, min;
int temp;
max = a > b ? a : b;
min = a < b ? a : b; if (max % min == 0)
return min;
while (max % min != 0) {
temp = max % min;
max = min;
min =temp;
}
return min;
}
-------------------------------------------------------------------------------------------------
求两个数的最小公倍数 LCM (lowest common multiple)
思路:求两个整数的最小公倍数就是求:这两个数的乘积除以这两个整数的最大公约数,你说是不是这个理?
(最小公倍数=两数的乘积/最大公约数)
*
*/
求两个整数的最大公约数GCM的更多相关文章
- c 求两个整数的最大公约数和最小公倍数
//求最大公约数是用辗转相除法,最小公倍数是根据公式 m,n 的 最大公约数* m,n最小公倍数 = m*n 来计算 #include<stdio.h> //将两个整数升序排列 void ...
- 【C语言】写一个函数,并调用该函数求两个整数的最大公约数和最小公倍数
程序分析: 在数学中,两个数的最小公倍数=两个数的乘积/两数的最大公约数. 求两个数的最大公约数,运用辗转相除法:已知两个整数M和N,假定M>N,则求M%N. 如果余数为0,则N即为所求:如果余 ...
- java 利用辗除法求两个整数的最大公约数和最小公倍数
题目:输入两个正整数m和n,求其最大公约数和最小公倍数. 程序分析:利用辗除法. package Studytest; import java.util.Scanner; public class P ...
- 用二进制方法求两个整数的最大公约数(GCD)
二进制GCD算法基本原理是: 先用移位的方式对两个数除2,直到两个数不同时为偶数.然后将剩下的偶数(如果有的话)做同样的操作,这样做的原因是如果u和v中u为偶数,v为奇数,则有gcd(u,v)=gcd ...
- 《Advanced Bash-scripting Guide》学习(十九):两个整数的最大公约数
本文所选的例子来自于<Advanced Bash-scripting Gudie>一书,译者 杨春敏 黄毅 #!/bin/bash #求两个整数的最大公约数 E_BADARGS= #如果参 ...
- php取两个整数的最大公约数算法大全
php计算两个整数的最大公约数常用算法 <?php//计时,返回秒function microtime_float (){ list( $usec , $sec ) = explode ( &q ...
- 《剑指offer》写一个函数,求两个整数之和,要求在函数体内不得使用+、-、*、/四则运算符号。
弱菜刷题还是刷中文题好了,没必要和英文过不去,现在的重点是基本代码能力的恢复. [题目] 剑指offer 写一个函数,求两个整数之和,要求在函数体内不得使用+.-.*./四则运算符号. [思路] 直觉 ...
- 算法 - 求两个自然数的最大公约数(C++)
//************************************************************************************************** ...
- C++程序设计实践指导1.5求两个整数集合并集改写要求实现
改写要求1:改写为单链表结构可以对任意长度整数集合求并集 #include <cstdlib> #include <iostream> using namespace std; ...
随机推荐
- [题目] Luogu P3707 [SDOI2017]相关分析
参考资料:[Luogu 3707] SDOI2017 相关分析 P3707 [SDOI2017]相关分析 TFRAC FRAC DFRAC \(\tfrac{\sum}{1}\) \(\frac{\s ...
- 课程设计小组报告——基于ARM实验箱的捕鱼游戏的设计与实现
课程设计小组报告--基于ARM实验箱的捕鱼游戏的设计与实现 一.任务简介 1.1 任务内容 捕鱼游戏这个项目是一个娱乐性的游戏开发,该游戏可以给人们带来娱乐的同时还可以给人感官上的享受,所以很受人们的 ...
- 20145236《网络对抗》Exp8 WEB基础实践
20145236<网路对抗>Exp8 WEB基础实践 一.基础问题回答 什么是表单 表单在网页中主要负责数据采集功能 一个表单有三个基本组成部分: 表单标签 表单域:包含了文本框.密码框. ...
- 树莓派开启SSH
2017-04-10-raspbian-jessie默认SSH功能时关闭的 boot下新建一个ssh的空文件
- oracle 添加登陆数据库触发器--记录IP 地址
----触发器--- ---创建中间插入的表 create table session_history tablespace bap_data as (select sid,username,prog ...
- Opencv——相机标定
相机标定的目的:获取摄像机的内参和外参矩阵(同时也会得到每一幅标定图像的选择和平移矩阵),内参和外参系数可以对之后相机拍摄的图像就进行矫正,得到畸变相对很小的图像. 相机标定的输入:标定图像上所有内角 ...
- IDEA中使用vim删除复制代码的行号
从别的地方复制来的源代码有时候会把前面的行号也一起拷过来,如果只是十几行代码的话手工去除还是方便的,但是如果代码有很多行的话,一行一行地删就不明智了. 例如我要复制以下代码 1 public clas ...
- WEB安全 - 认识与防御XSS攻击
目录 什么是xss攻击? XSS的危害 XSS攻击分类 xss攻击示例 反射型攻击 - 前端URL参数解析 反射型攻击 - 后端URL参数解析 注入型攻击 - 留言评论 如何规避xss攻击? 总结 什 ...
- SkylineGlobe 支持火狐和谷歌浏览器的可运行示例代码
示例代码: <html> <head> <title>3dml的Feature对象选中和隐藏</title> <script type=" ...
- vba基础知识
VBA中dim,static和public,private的区别 转载的文章:出自 红袖的博客http://blog.sina.com.cn/19850701xx 1.Public和Priva ...