求最大公约数(C语言实现)
求最大公约数有多种方法,接下来我对辗转相除法、更相减损法分别做介绍。
辗转相除法: gcd(a,b) = gcd(b,a mod b)。
假如,需要求 1997 和 615 两个正整数的最大公约数,用辗转相除法,是这样进行的:
1997 / 615 = 3 (余 152)
615 / 152 = 4(余7)
152 / 7 = 21(余5)
7 / 5 = 1 (余2)
5 / 2 = 2 (余1)
2 / 1 = 2 (余0)
至此,最大公约数为1
以除数和余数反复做除法运算,当余数为 0 时,取当前算式除数为最大公约数,所以就得出了 1997 和 615 的最大公约数 1。
更相减损法:
举例:
例1:用更相减损术求98与63的最大公约数。(一奇一偶)
解:由于63不是偶数,把98和63以大数减小数,并辗转相减:
98-63=35
63-35=28
35-28=7
28-7=21
21-7=14
14-7=7
所以,98和63的最大公约数等于7。
例2、用更相减损术求260和104的最大公约数。(两个偶数)
解:由于260和104均为偶数,首先用2约简得到130和52,再用2约简得到65和26。
此时65是奇数而26不是奇数,故把65和26辗转相减:
65-26=39
39-26=13
26-13=13
所以,260与104的最大公约数等于13乘以第一步中约掉的两个2,即1322=52。
代码实现如下:
#include<stdio.h>//辗转相除法
int gcd1(int x, int y)
{//判断x/y余数是否为0int z = x % y;//直到余数为0,则跳出循环while(z){//循环过程中,将除数给x,余数给y,求新的余数zx = y;y = z;z = x % y;}//除数y为最大公约数return y;
}//更相减损术
int gcd2(int x, int y)
{int sum1 = 1;//先判断 x y是否都是偶数while ((x % 2 == 0) && (y % 2 == 0)){sum1 *= 2;x = x / 2;y = y / 2;}while (1){//保证,被减数大于减数,不然就交换顺序if (x < y){int temp = x;x = y;y = temp;}//差放在s中int s = x - y;//判断差 和 减数 是否相等,如果是,跳出循环。if (y == s)break;else{x = y;y = s;}}//最大公约数就是约掉的若干个2的积与第二步中等数(减数=差)的乘积return y * sum1;
}int main()
{int a = 98;int b = 63;int max1 = gcd1(a, b);int max2 = gcd2(a, b);printf("%d %d的最大公约数为 %d\n", a, b, max1);printf("%d %d的最大公约数为 %d\n", a, b, max2);return 0;
}
求最大公约数(C语言实现)相关推荐
- c语言怎样求最大公约数,c语言求最大公约数
求差判定法. 如果两个数相差不大,可以用大数减去小数,所得的差与小数的最大公约数就是原来两个数的最大公约数.例如:求78和60的最大公约数.78-60=18,18和60的最大公约数是6,所以78和60 ...
- C语言用for循环求最大公约数,C语言循环结构
-C语言求最大公约数
这是一个C语言 while 循环示例:求正整数 m 和 n 的最大公约数. 问题分析 输入:两个正整数. 输出:一个正整数(最大公约数). 最大公约数(gcd)是指几个数共有的因数之中最大的一个数,比 ...
- c语言求最大公约数(c语言求最大公约数和最小公倍数代码)
C语言中求两个数的最大公约数的公式是什么? int i,a=3,b=6; int max=b; //初始化b大,下面判断如果a>b就把a给max //判断a,b大小 if(a>b) max ...
- 用c语言怎么求最大公约数,c语言求最大公约数
c语言求最大公约数[编辑] 概述 c语言是一种计算机编程语言,该语言的优势在于任何环境都能运行并能达到简易的方式编译.处理低级存储器和产生少量的机器码等效果. c语言是一种计算机编程语言,该语言的优势 ...
- 求最大公约数c语言代码_辗转相除求最大公约数原理
辗转相除法代码 代码并不难,很多人都会写. public static int f(int a, int b){ while(b != 0){ int temp = b; b = a % b; a = ...
- 用函数求最大公约数c语言,C语言求最大公约数公式分享
从键盘输入两个正整数 a 和 b,求其最大公约数和最小公倍数. 算法思想 利用格式输入语句将输入的两个数分别赋给 a 和 b,然后判断 a 和 b 的关系,如果 a 小于 b,则利用中间变量 t 将其 ...
- 数组求最大公约数c语言,C语言辗转相除法求2个数的最小公约数
辗转相除法最大的用途就是用来求两个数的最大公约数. 用(a,b)来表示a和b的最大公约数. 有定理: 已知a,b,c为正整数,若a除以b余c,则(a,b)=(b,c). (证明过程请参考其它资料) 例 ...
- 求最大公约数c语言实验心得,C语言编程实训报告(合集)
cout< void main()//主函数主函数主函数主函数 { int i,g; studentstu[3];while (i){i=menu(stu,3); switch(i) {case ...
- C语言设计函数求最大公约数,C语言程序设计课程设计--编写函数求取两个整数m,n的最大公约数和最小公倍数.doc_在线文库www.lddoc.cn...
C语言程序设计课程设计--编写函数,求取两个整数m,n的最大公约数和最小公倍数.doc C语言程序设计课程设计C语言程序设计课程设计评语考勤(10)纪律(10)过程(40)设计报告(30)答辩(10) ...
- C语言:欧几里得算法求最大公约数
文章目录 欧几里得算法 C语言:欧几里得算法求最大公约数 C语言:穷举法 欧几里得算法 举个例子说明欧几里得算法. 如图所示,用正方形地板砖,把这一块粉红色空地(长为xxx,宽为yyy,x>yx ...
最新文章
- iOS开发 关于启动页和停留时间的设置
- js-权威指南学习笔记18
- 2021高考成绩各科各题得分查询,2021年新疆高考分数一分一段位次表,新疆高考个人成绩排名查询方法...
- NYOJ 20 吝啬的国度 广度优先搜索
- Python中必学知识点:类方法、实例方法和静态方法
- 调试中的一些Python错误
- Python中的traceback模块
- iOS - Masonry自动布局
- c语言转图形化,「分享」C语言如何编写图形界面
- android中getSystemService详解
- Android BroadcastReceiver(一)
- Django之HttpRequest和HttpReponse
- GetRows的用法详解
- 使用RMAN备份与恢复数据库(2)——参数文件的备份与恢复
- 【干货分享】花坊类字体设计思路
- 武汉科技大学计算机转专业吗,武汉科技大学可以转专业吗,武汉科技大学新生转专业政策...
- 基于halcon的HSV颜色匹配实例
- 电脑使用技巧提升篇9:使用360压缩软件文件加密
- Android8.0 SystemUI 状态栏信号图标
- 个性化推荐系统,必须关注的五大研究热点
热门文章
- 突然怀念小时弹玻璃球的日子
- Spark:Jieba对数据库里提取的记录进行中文分词
- 处理得怎么样填空词语_六年级词语填空练习(答案)
- lamp部署配置及部署phpmyadmin
- Element UI报错:Unknown custom element: el-menu
- 叮当快药:8090后养生报告
- 伪装机器人炉石_不说炉石:招摇撞骗混入顶级电竞圈,这“伪装”技能可以给满分!...
- 四级作文-the relationship between parents and children
- HDU1253 胜利大逃亡(DFS)
- 反心灵鸡汤、毒鸡汤、乌鸦汤 ,金句十条,每一条都直击心灵