C语言练习之求最大公约数

简介: C语言练习之求最大公约数

前言

求两个数的最大公约数是一个很基础的数学问题,今天我来和大家分享用C语言求两个数的最大公约数的三种方法。

一、三种方法的基本原理和求解思路

1、辗转相除法

原理:

取两个数中最大的数做除数,较小的数做被除数,用最大的数除较小数,如果余数为0,则较小数为这两个数的最大公约数;

如果余数不为0,用较小数除上一步计算出的余数,直到余数为0,则这两个数的最大公约数为上一步的余数。

思路:

先判断两个数的大小,大的数赋值给n,小的数赋值给m。

用n%m如果结果为0则m的值为最大公约数

如果结果不为0,则将小的数赋值给n,将余数赋值给m

循环运算直到n%m==0成立

2、更相减损法

原理:

取两个数中的较大数做被减数,较小数做减数,用被减数减去减数,如果结果为0,则减数就是这两个数的最大公约数;

如果结果不为0,则将原减数作为新的被减数,上次的差作为新的减数,再进行运算,直到结果为0,则最大公约数为最终的减数。

思路:

先判断两个数的大小,将较大数赋值给n,将较小值赋值给m;

判断n-m==0是否成立

如果成立,则最大公约数为m;

如果不成立,则将n-m的值赋值给m,将原本的m的值赋值给n再进行运算和判断;

循环不成立时的过程直到成立,则最大公约数为m。

3、短除法

原理:

找出两个数的所有公约数,最大的那个就是最大公约数

思路:

先找出较小数,找约数时的限制条件就是不能超过较小数的值,所有公约数中最大的就是最大公约数

二、源代码以及运行截图

为了方便大家的交流和学习,我将程序的源代码放置在下方。

1、辗转相除法

int main()
{
  int n = 0;
  int m = 0;
  int temp = 0;
  printf("请输入两个操作数:>");
  scanf("%d %d", &n, &m);
  if (n < m)
  {
    temp = n;
    n = m;
    m = temp;
  }
  while (1)
  {
    if (n % m == 0)
    {
      printf("这两个数的最大公约数为%d\n", m);
      break;
    }
    else
    {
      temp = m;
      m = n % m;
      n = temp;
    }
  }
  return 0;
}

运行截图:

2、更相减损法

int main()
{
  int n = 0;
  int m = 0;
  int temp = 0;
  printf("请输入两个操作数:>\n");
  scanf("%d %d", &n, &m);
  if (n < m)
  {
    temp = n;
    n = m;
    m = temp;
  }
  while (1)
  {
    if (n - m == 0)
    {
      printf("这两个数的最大公约数为%d\n", m);
      break;
    }
    else
    {
      temp = m;
      m = n - m;
      n = m;
    }
  }
  return 0;
}

 运行截图:

3、短除法

int main()
{
  int n = 0;
  int m = 0;
  int temp = 0;
  int i = 1;
  int t = 0;
  printf("请输入两个操作数:>\n");
  scanf("%d %d", &n, &m);
  if (n > m)
  {
    temp = n;
    n = m;
    m = temp;
  }
  for (i = 1; i <= n; i++)
  {
    if (n % i == 0 && m % i == 0)
    {
      t = i;
    }
  }
  printf("这两个数的最大公约数为%d\n", t);
  return 0;
}

 运行截图:

总结

 以上就是今天要讲的内容,本文简单的介绍了用C语言求两个数的最大公约数的三种方法的思路,还进一步用展示了代码的运行结果验证了作者的思路。

本文的作者也只是一个正在学习C语言等编程知识的萌新,若这篇文章中有哪些不正确的内容,请在评论区向作者指出(也可以私信作者),欢迎大佬们指点,也欢迎其他正在学习C语言的萌新和作者进行交流。

最后,如果本篇文章对你有所启发的话,也希望可以支持支持作者,后续作者也会定期更新学习记录。谢谢大家!

相关文章
|
6月前
|
算法 C语言 容器
从C语言到C++_18(stack和queue的常用函数+相关练习)力扣(上)
从C语言到C++_18(stack和queue的常用函数+相关练习)力扣
48 0
|
6月前
|
C语言
C语言指针——练习
C语言指针——练习
|
5月前
|
存储 安全 C语言
【C语言刷题每日一题】——求最大公约数(带数学计算过程详解)
【C语言刷题每日一题】——求最大公约数(带数学计算过程详解)
|
5月前
|
C语言
C语言练习代码第一篇
C语言练习代码第一篇
|
6月前
|
编译器 C语言 C++
从C语言到C++⑥(第二章_类和对象_中篇_续)大练习(日期类)+笔试选择题(下)
从C语言到C++⑥(第二章_类和对象_中篇_续)大练习(日期类)+笔试选择题
54 2
从C语言到C++⑥(第二章_类和对象_中篇_续)大练习(日期类)+笔试选择题(下)
|
6月前
|
存储 前端开发 算法
从C语言到C++_18(stack和queue的常用函数+相关练习)力扣(下)
从C语言到C++_18(stack和queue的常用函数+相关练习)力扣
21 0
|
5月前
|
C语言
|
5月前
|
编译器 C语言
|
5月前
|
C语言
|
6月前
|
算法 编译器 C语言
从C语言到C++⑥(第二章_类和对象_中篇_续)大练习(日期类)+笔试选择题(上)
从C语言到C++⑥(第二章_类和对象_中篇_续)大练习(日期类)+笔试选择题
47 3