又是王老师的一道练习题:

任务描述

1.任意给定两个正整数;判断它们是否都是偶数。若是,则用2约简;若不是则执行第二步;

2.以较大的数减较小的数,接着把所得的差与较小的数比较,并以大数减小数。继续这个操作,直到所得的减数和差相等为止。

3.第一步中约掉的若干个2与第二步中等数的乘积就是所求的最大公约数。

本关任务:使用更相减损法求取任意两个整数的最大公约数

#include <stdio.h>//当n,m都是偶数时,求约2的次数
int divide_time(int n, int m);
// 以较大的数减较小的数,接着把所得的差与较小的数比较, 并以大数减小数。继续这个操作,直到所得的减数和差相等为止,并返回该数
int subtrsct(int n, int m);
int main()
{int n, m;int sub;int divisor;//divisor为最大公约数scanf("%d%d", &n, &m);//判断n,m是否都为偶数if (n % 2 == 0&&m % 2 == 0){int time = divide_time(n, m);sub = subtrsct(n, m);divisor = sub * time;printf("%d", divisor);}else{divisor = subtrsct(n, m);printf("%d", divisor);}return 0;
}int divide_time(int n, int m)
{int time = 0;//计约2次数while (1){if (n % 2 == 0 && m % 2 == 0){time++;n = n / 2;m = m / 2;}else{break;//若不能再约则跳出}}return time;
}int subtrsct(int n, int m)
{int min, max,sub;int temp;min = n;max = m;while(1){//确保以大减小if (min > max){temp = min;min = max;max = temp;}sub = max - min;if (sub == min){break;// 所得的减数和差相等则跳出}max = sub;}return sub;
}

运行结果如下:

C语言:求最大公约数-更相减损法(循环自定义函数的定义与调用)相关推荐

  1. C++ 求最大公约数 更相减损法 欧几里得算法 暴力穷举法

    两个数的最大公约数是指能同时被他们整除的最大正整数. 两个数的最大公约数等于它们中 较小的数 和 两数之差 的最大公约数. 252和105的最大公约数是21(252 = 21 × 12:105 = 2 ...

  2. 求最大公约数(更相减损术)

    更相减损术:可半者半之,不可半者,副置分母.子之数,以少减多,更相减损,求其等也.以等数约之. 使用步骤: 第一步:任意给定两个正整数:判断它们是否都是偶数.若是,则用2约简:若不是则执行第二步.(可 ...

  3. C语言实现辗转相除法和更相减损法求两数最大公约数,及求最小公倍数的方法

    在学习从C语言过程中,我们会遇到一个题目,求两个整数的最大公约数,那么接下来分别介绍两种方法求最大公约数 1,辗转相除法 辗转相除法, 又名欧几里德算法(Euclidean Algorithm),是求 ...

  4. c语言最大公约数更相减损法,【C语言】最大公约数(更相减损法)和(辗转相除法)...

    #include #include /* 编写一个函数,传入a,b两个int类型的变量,返回两个值的最大公约数. 例如:输入传入(0 , 5)函数返回5,传入(10 , 9)函数返回1,传入(12 , ...

  5. C:求两个数的最大公约数详解(硬核算法,辗转相除法,更相减损法)

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

  6. 求最大公约数(更相减损法)

    穷举法时做的题超时了,参考了这篇文章求最大公约数的4种常用算法_AmethystFOB的博客-CSDN博客_最大公约数 对更相减损法产生了兴趣 第一步:任意给定两个正整数:判断它们是否都是偶数.若是, ...

  7. 辗转相除法+更相减损法求最大公约数

    怎么求两个数的最大公约数呢? 简单的想法就是直接暴力枚举,试出最大公约数 #暴力枚举 #暴力枚举 def GCD(numberA,numberB):gcd=1for i in range(2,max( ...

  8. 求最大公约数与最小公倍数 (辗转相除法+更相减损法+Stein算法)

    辗转相除法与更相减损法对比: (1)两者都是求最大公因数的方法,计算上辗转相除法以除法为主,更相减损术以减法为主,计算次数上辗转相除法计算次数相对较少,特别当两个数字大小区别较大时计算次数的区别较明显 ...

  9. C语言复习---获取最大公约数(辗转相除法和更相减损法)

    源自:百度百科 辗转相除法 辗转相除法:辗转相除法是求两个自然数的最大公约数的一种方法,也叫欧几里德算法. 例如,求(319,377): ∵ 319÷377=0(余319) ∴(319,377)=(3 ...

最新文章

  1. 如何解决请求URL长度超过配置的maxurlLength值问题
  2. html的首选参数设置,设置 Animate 中的首选参数
  3. 3.通过现有的PDB创建一个新的PDB
  4. BugKuCTF 杂项 白哥的鸽子
  5. 【算法学习笔记】一、算法基础
  6. ASP.NET性能优化小结(ASP.NETC#)(转)
  7. vue 分享微信传参_vue实现微信分享链接添加动态参数的方法
  8. backlog配置_Tomcat 配置详解和调优
  9. Online开发初体验——Jeecg-Boot 在线设计流程
  10. es6 async函数的基本用法
  11. [Swift]LeetCode268. 缺失数字 | Missing Number
  12. 小学音乐教学和计算机的融合,【多媒体技术论文】小学音乐多媒体教学融入策略问题(共5881字)...
  13. 虎牙被抬员工当事人再发声;淘宝回应网店客服“看见”用户未发送内容;Python 3.9.2 发布 | 极客头条...
  14. pipeline(管道的连续应用)
  15. nginx动态php转发,Nginx 动态 upstreams 实现,nginxupstreams_PHP教程
  16. 【一分钟知识】决策树-ID3,C4.5,CART
  17. 张俊芳电机学11章计算题答案
  18. Springboot+vue项目疫情社区防控系统
  19. 下一代微服务架构——Service Mesh 服务网格新生代Istio
  20. 2022妈妈杯移动通信网络站址规划和区域聚类问题D题思路导读,你还在用kmeans?

热门文章

  1. 《数学之美》——机器学习最佳入门教程
  2. c语言实型存储方式,.C语言实型数据的编码和存储.pdf
  3. soj3360_完全背包
  4. VS CODE 微软旗下最好用的前端开发IDE编辑器+常用插件介绍
  5. Spring Bean生命周期,就像人的一生
  6. 在 Java 中转义 HTML
  7. JSP与Servlet之间传值
  8. 小程序对接 自写接口
  9. java实现开方运算(牛顿迭代法)
  10. PCA与PPCA推导及理解