C语言最大公约数求解办法及时间复杂度比较

  • **1.暴力穷举法:**
  • **2.辗转相除法:**
  • **3.更相减损法:**

— 最大公因数,也称最大公约数、最大公因子,指两个或多个整数共有约数中最大的一个。最大公约数作为数学中常见的数学概念,在c语言中也可以用多种办法来求解。不同的办法理解难度和时间复杂度均不同。
以下我来介绍几种求最大公约数的方法:

1.暴力穷举法:

此方法是理解难度最低的办法,就是两个数从两个数字的较小者循环递减到1,看第一个满足两个数取余数皆为0的数字,并输出。

int num1=0;
int num2=0;
printf("请输入两个数字求最大公约数,用空格间隔:");
scanf("%d %d",&num1,&num2);
int min=num1;if (num1>num2){min=num2;}//把最小的数字赋值给minint time=0;//在循环中设置一个变量记录时间复杂度for(int i=min;i>=1;i--){time++;if(num1%i==0 && num2%i==0){printf("它们的最大公约数是:%d\n 时间复杂度是%d:\n",i,time);//输出最大公约数和时间复杂度break;}
}               

2.辗转相除法:

此方法也叫欧几里得算法,利用数学中的一个规则来求解。


两个数字相除取余,(num1%num2)第一个数字退出,第二个下一轮第一个,余数做第二个,一直循环。原理是基于两个整数的最大公约数等于其中较小的数和两数的相除余数的最大公约数。
(来源自百度百科)

我们可以用一个循环来表示该算法的辗转相除步骤。具体步骤如下:

int num1,num2;
printf("请输入两个数字求最大公约数,用空格间隔:");
scanf("%d %d",&num1,&num2);
int i=0;//余数
int time=0;//在循环中设置一个变量记录时间复杂度while((i=num1%num2)!=0){//注意括号的写法,运算符的优先级会影响结果num1=num2;num2=i;time++;}
printf("它们的最大公约数是:%d\n 时间复杂度是%d:\n",num2,time);//输出最大公约数和时间复杂度     

3.更相减损法:

更相减损法:也叫更相减损术,是出自《九章算术》的一种求最大公约数的算法,它原本是为约分而设计的,但它适用于任何需要求最大公约数的场合。
输入两个数,用较大的减去较小的,余数赋值在进行相减,直到数字相同,为最大公约数。
具体的代码如下:

int num1, num2, time=0;//在循环中设置一个变量记录时间复杂度printf("请输入两个数字求最大公约数,用空格间隔:");scanf("%d %d", &num1, &num2);while (num1 != num2){if (num1>num2)num1 = num1 - num2;elsenum2 = num2 - num1;time++;}printf("它们的最大公约数是:%d\n 时间复杂度是%d:\n", num1, time);

以上三种方法都是比较简单好理解的办法,仅供参考。
时间复杂度上和具体的例子有关,但暴力穷举法是不推荐使用的(一般都很大…)

C语言最大公约数求解办法及时间复杂度比较相关推荐

  1. c语言float输出分数,c语言同一题目求解结果用float和int输出值差1.

    c语言同一题目求解结果用float和int输出值差1. 答案:3  信息版本:手机版 解决时间 2018-12-08 22:35 已解决 2018-12-08 05:38 c语言同一题目求解结果用fl ...

  2. c语言实现二分法_C语言实现二分法求解方程在区间内的根

    C语言实现二分法求解方程在区间内的根. 设有非线性方程: 其中, 为 上连续函数且设 (不妨设方程在 内仅有一个实根),求上述方程实根的二分法过程,就是将含根区间[a,b]逐步分半,检查函数值符号的变 ...

  3. 基于主定理以及递推树求解递归算法的时间复杂度

    非递归算法的时间复杂度可以通过找到执行次数最多的代码,计算其执行次数即可.但是递归算法的时间复杂度则无法通过这种方式求得.有一种最简单的求递归算法的方式,即利用递推方法求解时间复杂度.如下所示: 这种 ...

  4. [数据结构]递归树:借助树求解递归算法的时间复杂度

    文章目录 递归树与时间复杂度分析 实战一:分析快速排序的时间复杂度 实战二:分析斐波那契数列的时间复杂度 实战三:待补充,先学其他的... 递归树与时间复杂度分析 我们前面讲过,递归的思想就是,将大问 ...

  5. c语言作业迷宫代码,用c语言实现迷宫求解完美源代码

    <用c语言实现迷宫求解完美源代码>由会员分享,可在线阅读,更多相关<用c语言实现迷宫求解完美源代码(7页珍藏版)>请在人人文库网上搜索. 1.include #include ...

  6. 递归树: 如何借助树来求解递归算法的时间复杂度

    ------ 本文是学习算法的笔记,<数据结构与算法之美>,极客时间的课程 ------ 今天,来讲树这种数据结构的一种特殊的应用,递归树. 我们都知道,递归代码的时间复杂度分析起来很麻烦 ...

  7. PLC中用scl语言编写算法求解modbus crc校验码

    PLC中用scl语言编写算法求解modbus crc校验码 因为不是严格的modbus协议,是用的自由口通讯,传输数据里面得加上CRC校验,所以得搞个算法根据发送不同的数据生成相应的CRC校验码. 现 ...

  8. c语言 最大公约数 最小公倍数的编程,C语言三种算法求解最大公约数与最小公倍数...

    C语言三种算法求解最大公约数与最小公倍数 最大公约数与最小公倍数的求解是很多初学C的人所面临的一道问题.当然这道问题并不难解答,也有很多人已经写过相关的博客,我在此书写此篇博客,一是为了让自己能够夯实 ...

  9. c语言线性代数方程组求解编程,计算机编程c语言求解线性代数方程组

    计算机编程c语言求解线性代数方程组 安 徽 三 联 学 院本 科 专 业 学 年 论 文题 目:线性方程组求解方法比较姓 名 万里龙 专 业 计算机科学技术系 班 级 08 级本科(2)班 指导教师 ...

最新文章

  1. 远心镜头技术及其选型介绍
  2. HUD 1043 Eight 八数码问题 A*算法 1667 The Rotation Game IDA*算法
  3. Spring可扩展Schema标签
  4. setting virtualbox share folder in windows7 system
  5. 未能加载文件或程序集“System.Data.SQLite, Version=1.0.96.0, Culture=neutral, PublicKeyToken=db937bc2d44ff139...
  6. 精通spring——深入java ee开发核心技术 pdf_2019精通Spring Boot 42讲 高清pdf完整版
  7. DB排行榜更新,.NET Core+MySQL成主流!
  8. 深入理解JavaScript系列(32):设计模式之观察者模式
  9. 【CodeForces - 988C 】Equal Sums (思维,STLmap,STLset,tricks)
  10. python爬虫获取中国天气网天气数据 requests BeautifulSoup re
  11. int基本类型变成Integer包装类
  12. 如何用python处理缺失值_用Python处理数据集中的缺失值
  13. [DeeplearningAI笔记]改善深层神经网络_深度学习的实用层面1.10_1.12/梯度消失/梯度爆炸/权重初始化...
  14. mac iterm 怎么搜索不能输入_Mac高效开发之iTerm2、Prezto和Solarized主题
  15. 读大师的书 说自己的话——《传世经典书丛评注版》邀你来点评
  16. OpenCV 文字绘制——cv::putText详解
  17. 移远EC20 EC600 EC200系列通过MQTT协议接入电信物联网平台
  18. 家庭mesh网络与IPTV的搭建
  19. 【FinE】债券久期和凸性
  20. 【jQuery】jQuery本地时间与世界时间时差转换

热门文章

  1. 今明两天微服务 Apache ServiceComb 北京深圳连续”双开”
  2. for循环输出素数探究【java】
  3. 如何调试上位机软件与串口进行通信
  4. VLAN的作用 与 基本原理
  5. MyCat实现MySQL读写分离(单主单从多库)
  6. 计算机网络ppt儿童版,计算机网络完整版本ppt课件
  7. 高级软件工程-读书笔记之思想篇
  8. zkClient简介及API使用
  9. python微信群管理开禁言_怎么设置群管理员-微信群最需要的,是禁言功能
  10. 渗透测试-----9-拒绝服务(黑客其它的攻击方式)