【C语言初阶】求两个数的最大公约数,三种算法

简介: 给定两个整数,让你求这两个数的最大公约数最大公约数顾名思义就是:这几个整数共有的约数中最大的一个。

给定两个整数,让你求这两个数的最大公约数

最大公约数顾名思义就是:这几个整数共有的约数中最大的一个。

目录

1. 辗转相除法

2.更相减损法

3.穷举法


1. 辗转相除法

思路:


(1)将两个整数求余数a%b = c;如果c = 0,则b为最大公约数


(2)如果c != 0,则让a = b, b = c,继续执行a%b = c;判断条件为c是否为零


例如:a = 15,b = 18


c = a%b = 15%18 = 15,c = 15,c此时不等于0;


则进行a = b,b = c;a = 18,b = 15;


继续执行c = a%b = 18%15 = 3,此时c=3不为0;


执行a = b, b = c;a = 15,b = 3;


继续进行c = a%b = 15%3 = 0;此时c = 0循环结束。


代码如下:

1.#include<stdio.h>
int main()
{
  int a, b, c;
  printf("请输入两个整数:");
  scanf("%d%d", &a, &b);
  c = a % b;
  while (c != 0)
  {
    a = b;
    b = c;
    c = a % b;
  }
  printf("最大公约数为:%d", b);
  return 0;
}

2.更相减损法

思路:


(1)如果a = b;则a或b就是最大公约数


(2)如果a != b;若a>b,则a = a-b;若a<b,则b = b-a;一直执行到a = b循环结束


例如:a = 15,b = 18


因为a != b且a<b,则b = a-b = 18-15 = 3,


b = 3,a>b,则a = a-b = 15-3 = 12 ,


a = 12,a>b,则a = a-b =12-3 = 9,


a = 9,a>b,则a = a-b =9-3 = 6,


a = 6,a>b,则a = a-b =6-3 = 3,


a = 3,a = b = 3,此时a = b = 3循环结束。


代码如下:

1.#include <stdio.h>
int main()
{
  int a, b;
  printf("请输入两个整数:");
  scanf("%d %d", &a, &b);
  while (a != b)
  {
    if (a > b)
      a = a - b;
    else
      b = b - a;
  }
  printf("最大公约数为:%d\n", a);
  return 0;
}

3.穷举法

思路:


(1)选出a和b最小的数放入c中,然后分别用a和b对c求余数,看是否能被c整除,同时能被c整除则c是这两个数的最大公约数


(2)如果不能被c同时整除,c进行减一(c--),一直执行到a和b同时能被c整除。


例如:a = 15,b = 18


把较小值赋给c,c = 15,a%c = 15%15 = 0,b = b%c = 18%15 = 3,不能同时被c整除,循环继续 c--;


a%c = 15%14 = 1,b = b%c = 18%14 = 4,不能同时被c整除,循环继续 c--;


....(不一一列举了)


a%c = 15%3 = 0,b = b%c = 18%3 = 0,能同时被c整除,循环结束。


代码如下:

1.#include<stdio.h>  
int main()
{
  int a, b;
  int c = 0;
  printf("请输入两个整数:");
  scanf("%d %d", &a, &b);
  c = (a > b) ? b : a;   //三目运算符 将最小的赋给c
  while (a % c != 0 || b % c != 0)    
  {
    c--;
  }
  printf("最大公约数为:%d\n", c);
}

最后,文章结束啦!!希望对你有帮助!

相关文章
|
4月前
|
算法 数据处理 C语言
C语言中的位运算技巧,涵盖基本概念、应用场景、实用技巧及示例代码,并讨论了位运算的性能优势及其与其他数据结构和算法的结合
本文深入解析了C语言中的位运算技巧,涵盖基本概念、应用场景、实用技巧及示例代码,并讨论了位运算的性能优势及其与其他数据结构和算法的结合,旨在帮助读者掌握这一高效的数据处理方法。
124 1
|
4月前
|
搜索推荐 C语言
【排序算法】快速排序升级版--三路快排详解 + 实现(c语言)
本文介绍了快速排序的升级版——三路快排。传统快速排序在处理大量相同元素时效率较低,而三路快排通过将数组分为三部分(小于、等于、大于基准值)来优化这一问题。文章详细讲解了三路快排的实现步骤,并提供了完整的代码示例。
94 4
|
2月前
|
算法 C语言
【C语言程序设计——函数】利用函数求解最大公约数和最小公倍数(头歌实践教学平台习题)【合集】
本文档介绍了如何编写两个子函数,分别求任意两个整数的最大公约数和最小公倍数。内容涵盖循环控制与跳转语句的使用、最大公约数的求法(包括辗转相除法和更相减损术),以及基于最大公约数求最小公倍数的方法。通过示例代码和测试说明,帮助读者理解和实现相关算法。最终提供了完整的通关代码及测试结果,确保编程任务的成功完成。
102 15
|
2月前
|
算法 C语言
【C语言程序设计——循环程序设计】求解最大公约数(头歌实践教学平台习题)【合集】
采用欧几里得算法(EuclideanAlgorithm)求解两个正整数的最大公约数。的最大公约数,然后检查最大公约数是否大于1。如果是,就返回1,表示。根据提示,在右侧编辑器Begin--End之间的区域内补充必要的代码。作为新的参数传递进去。这个递归过程会不断进行,直到。有除1以外的公约数;变为0,此时就找到了最大公约数。开始你的任务吧,祝你成功!是否为0,如果是,那么。就是最大公约数,直接返回。
107 18
|
7月前
|
存储 算法 C语言
"揭秘C语言中的王者之树——红黑树:一场数据结构与算法的华丽舞蹈,让你的程序效率飙升,直击性能巅峰!"
【8月更文挑战第20天】红黑树是自平衡二叉查找树,通过旋转和重着色保持平衡,确保高效执行插入、删除和查找操作,时间复杂度为O(log n)。本文介绍红黑树的基本属性、存储结构及其C语言实现。红黑树遵循五项基本规则以保持平衡状态。在C语言中,节点包含数据、颜色、父节点和子节点指针。文章提供了一个示例代码框架,用于创建节点、插入节点并执行必要的修复操作以维护红黑树的特性。
156 1
|
3月前
|
存储 算法 程序员
C 语言递归算法:以简洁代码驾驭复杂逻辑
C语言递归算法简介:通过简洁的代码实现复杂的逻辑处理,递归函数自我调用解决分层问题,高效而优雅。适用于树形结构遍历、数学计算等领域。
|
4月前
|
存储 算法 数据管理
C语言算法复杂度
【10月更文挑战第20天】
55 5
C语言算法复杂度
|
4月前
|
存储 缓存 算法
C语言在实现高效算法方面的特点与优势,包括高效性、灵活性、可移植性和底层访问能力
本文探讨了C语言在实现高效算法方面的特点与优势,包括高效性、灵活性、可移植性和底层访问能力。文章还分析了数据结构的选择与优化、算法设计的优化策略、内存管理和代码优化技巧,并通过实际案例展示了C语言在排序和图遍历算法中的高效实现。
94 2
|
4月前
|
机器学习/深度学习 算法 数据挖掘
C语言在机器学习中的应用及其重要性。C语言以其高效性、灵活性和可移植性,适合开发高性能的机器学习算法,尤其在底层算法实现、嵌入式系统和高性能计算中表现突出
本文探讨了C语言在机器学习中的应用及其重要性。C语言以其高效性、灵活性和可移植性,适合开发高性能的机器学习算法,尤其在底层算法实现、嵌入式系统和高性能计算中表现突出。文章还介绍了C语言在知名机器学习库中的作用,以及与Python等语言结合使用的案例,展望了其未来发展的挑战与机遇。
94 1
|
4月前
|
并行计算 算法 测试技术
C语言因高效灵活被广泛应用于软件开发。本文探讨了优化C语言程序性能的策略,涵盖算法优化、代码结构优化、内存管理优化、编译器优化、数据结构优化、并行计算优化及性能测试与分析七个方面
C语言因高效灵活被广泛应用于软件开发。本文探讨了优化C语言程序性能的策略,涵盖算法优化、代码结构优化、内存管理优化、编译器优化、数据结构优化、并行计算优化及性能测试与分析七个方面,旨在通过综合策略提升程序性能,满足实际需求。
107 1