Problem B: 编写函数:求最大公约数gcd()和最小公倍数lcm() (Append Code) 山东科技大学 oj
题目描述
辗转相除法,也称欧几里得算法,是求最大公约数的算法。辗转相除法首次出现于欧几里得的《几何原本》(第VII卷,命题i和ii)中,而在中国则可以追溯至东汉出现的《九章算术》。
两个整数的最大公约数(亦称公约数)是能够同时整除它们的最大的正整数。辗转相除法基于如下原理:两个整数的最大公约数等于其中较小的数和两数的差的最大公约数。例如,252和105的最大公约数是21(252 = 21 × 12;105 = 21 × 5);因为252 − 105 = 147,所以147和105的最大公约数也是21。在这个过程中,较大的数缩小了,所以继续进行同样的计算可以不断缩小这两个数直至其中一个变成零。这时,所剩下的还没有变成零的数就是两数的最大公约数。
例如,计算a = 1071和b = 462的最大公约数的过程如下:从1071中不断减去462直到小于462(可以减2次,即商q0 = 2),余数是147:
1071 = 2 × 462 + 147.
然后从462中不断减去147直到小于147(可以减3次,即q1 = 3),余数是21:
462 = 3 × 147 + 21.
再从147中不断减去21直到小于21(可以减7次,即q2 = 7),没有余数:
147 = 7 × 21 + 0.
此时,余数是0,所以1071和462的最大公约数是21。
要求编写两个函数:
求最大公约数的函数gcd()。gcd()的返回值是两个参数的最大公约数,函数原型如下:
int gcd(int, int);求最小公倍数的函数lcm()。lcm()的返回值是两个参数的最小公倍数,函数原型如下:
int lcm(int, int);
函数gcd()和lcm()的调用格式见“Append Code”。
输入
输入为多行,每行有一对非负整数a,b,且a*b不会超出int类型的数据范围。输入至EOF结束。
输出
每行输出一对a,b的最大公约数和最小公倍数,顺序与输入对应。
从整除定义出发:若a整除b(b除以a没有余数),则b是a的倍数,a是b的约数,这里要求b不为0。因此0是任意整数的倍数(任意整数都是0的约数),但是0不能是约数。
样例输入
1 1
2 3
2 2
3 2
4 6
7 5
12 6
18 9
24 36
样例输出
1 1
1 6
2 2
1 6
2 12
1 35
6 12
9 18
12 72
代码如下:
#include <stdio.h>
int gcd(int a, int b)//最大公约数
{int m;if(b==0)//判断a或b为零的情况{m = a;}else if(a==0){m = b;}else{int result = a % b;int x = a;int y = b;while(result!=0){x = y;y = result;result = x % y;}m = y;}return m;
} int lcm(int a, int b)//最小公倍数
{int n = 1;int count = 1;int max = a;if(a<b){max = b;}if(a==0||b==0)//a==0 or b==0的时最小公倍数为0{n = 0;}else{while(n%a!=0||n%b!=0)//求得最小公倍数{n = count*max;count++;} }return n;
}
int main()
{int a, b;while(scanf("%d %d", &a, &b) != EOF)printf("%d %d\n", gcd(a, b), lcm(a, b));return 0;
}
Problem B: 编写函数:求最大公约数gcd()和最小公倍数lcm() (Append Code) 山东科技大学 oj相关推荐
- 山东科技大学OJ题库 1937 编写函数:几点几分几秒 (Append Code)
1937 编写函数:几点几分几秒 (Append Code) Description 一天24小时,每小时60分钟,每分钟60秒.一天共有86400秒. 你的任务是编写一个程序,输入一个在0-8639 ...
- C语言求二个数的最大公约数gcd和最小公倍数lcm(附完整源码)
求二个数的最大公约数和最小公倍数 实现以下接口 实现卡最大公约数和最小公倍数完整源码(定义,实现,main函数测试) 实现以下接口 int gcd(int a, int b);//求最大公约数 int ...
- Python最大公约数gcd、最小公倍数lcm
1. 最大公约数 最大公约数(Greatest Common Divisor)缩写为GCD 这里求最大公约数的方法为辗转相除法 a, b = map(int, input('请输入两个数字,其间用空格 ...
- 最大公约数GCD与最小公倍数LCM
一.最大公约数(GCD) 最大公约数的递归:1.若a可以整除b,则最大公约数是b 2.如果1不成立,最大公约数便是b与a%b的最大公约数. 辗转相除法. 1.欧几里得算法(辗转相除法) int ...
- 最大公约数(gcd)和最小公倍数(lcm)的多种解法 Java 实现
下面总共介绍了四种最大公约数的求解方法和一个最小公倍数的求解方法 该代码的视频讲解 [300题刷题挑战]leetcode力扣 最大公约数和最小公倍数的多种解法 GCDandLCM第八十三题 | 数学方 ...
- 编写函数求两个数的最大公约数,采用递归法计算两数的最大公约数。
提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档 题目: [实验案例3:函数的递归调用] 编写函数求两个数的最大公约数,采用递归法计算两数的最大公约数. [实验指导] 分析:m.n为两 ...
- 【勇敢牛牛,不怕困难】有手就行栏目:头歌教学平台 - 湖南工业大学刘强老师的C语言函数实战课堂作业答案 - > - > {求和+回文数计算+编写函数求表达式的值+阶乘数列+亲密数+公约数公倍数求解}
第一关:求和 任务描述 题目描述:给你一个n,要求你编写一个函数求1+2+-+n. 输入 输入一个n 输出 输出1+2+-+n的和 测试说明 样例输入: 100 样例输出: 5050 分析: 这个是真 ...
- C语言求最大公约数GCD的算法(附完整源码)
C语言求最大公约数GCD的算法 C语言求最大公约数GCD的算法完整源码(定义,实现,main函数测试) C语言求最大公约数GCD的算法完整源码(定义,实现,main函数测试) #include < ...
- EduCoder-程序设计技术R-函数-(第1关:求和)(第2关:回文数计算)(第3关: 编写函数求表达式的值)(第4关:阶乘数列)(第5关:亲密数)(第6关:公约公倍数)
目录 第1关:求和 代码示例 第2关:回文数计算 代码示例 第3关: 编写函数求表达式的值 代码示例 第4关:阶乘数列 代码示例 第5关:亲密数 代码示例 第6关:公约公倍数 代码示例 第1关:求和 ...
最新文章
- 边缘计算边缘计算edge_Edge AI-边缘上的计算机视觉推理
- Android中的音频播放(MediaPlayer和SoundPool)
- 无线业务需求的线路设计以及拓扑图实现
- js原生popup_JavaScript的popup框
- python内置函数面向对象_Pyhton——面向对象进阶二:类的内置函数补充、描述符...
- SuperMap IS.NET自定义Action添加Mark
- html绝对定位怎么页面居中,html – 如何将绝对定位的元素居中?
- 基于 HTML5 WebGL 的 3D 场景中的灯光效果
- NYOJ-阶乘之和(贪心)
- 《MYSQL必知必会》—1.了解SQL
- flash计算机硬件,实测Flash在硬件加速下的对比
- 【数据艺术科技1】基于pyhon的高维数据可视化。(1、2维)
- The APR based Apache Tomcat Native library which allows optimal performance in production environme
- DIY个人智能家庭网关—— 路由器篇之申请公网IP
- 毕节职业技术学院计算机网络技术专业,毕节职业技术学院计算机网络技术9.顶岗实习安排...
- Web前端开发框架推荐
- FreeRTOS软件定时器 基于STM32
- 实现生产者消费者的三种方式
- 本地安装nginx部署项目
- Gartner云安全理念解读
热门文章
- C#.Net工作笔记014---C#中internal的意思
- 杭电1596find the safest road
- OpenCV 2.4.8 or OpenCV 2.4.9组件结构全解析
- WSASocket()和socket()两个函数的区别
- netbeans打包java程序,并包含外部jar包
- 3d激光雷达开发(绘制长方体)
- 中绘制折线_统计图之折线图的结构和制作过程
- 我的世界java占用太多内存_Java 进程占用内存过多,幕后元凶原来是线程太多
- python界面开发工 跨平台具_python GUI开发常用工具
- npm 卸载_前端基础学习(一)--npm