C语言 - 求最大公约数

简介: C语言 - 求最大公约数


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

1:

思路:

24  18 - 最大公约数不会超过18

24  17

24  16

… …

24  6

让较小的数字往下找,直到能同时被24和18整除

#include<stdio.h>
#pragma warning(disable:4996)
int main()
{
  int m = 0;
  int n = 0;
  scanf("%d%d", &m,&n);
  //假设m和n的最大公因数是较小值,将较小值放到gcd里
  int gcd = 0;
  if (m > n)
    gcd = n;
  else
    max = m;
  while(1)
  {
    if(m % gcd == 0 && n % gcd == 0)
    {
      printf("最大的公约数是:%d\n", gcd);
      break;
    }
    max--;
  }
}

2:

欧几里得算法 - 俗称辗转相除法

24   18

24 % 18 = 1 … 6

18 % 6   = 3 … 0

以除数和余数循环做除法运算,当余数为0时,取当前算式除数为最大公约数

这里6就是24和18的最大公约数

#include<stdio.h>
#pragma warning(disable:4996)
int main()
{
  int m = 0;
  int n = 0; 
  scanf("%d%d", &m, &n);
  //保证最大值在永远是除数
  if (m < n)
  {
    int temp = m;
    m = n;
    n = temp;
  }
  while (m % n)
  {
    if( m % n != 0 )//更换除数和被除数
    {
      int ret  = m % n;
      m = n;
      n = ret;
    }
    else 
    {
      printf("最大公约数是%d\n", n);
      break;
    }
  }
  return 0;
}

优化2:

其实在最开始没必要把最大值设置为除数

18 % 24 = 0 … 18 ->交换后24 % 18

#include<stdio.h>
#pragma warning(disable:4996)
int main()
{
  int m = 0;
  int n = 0;
  int ret = 0;
  scanf("%d%d", &m,&n);
  while (ret = m % n)
  {
    m = n;
    n = ret;
  }
  printf("最大的余数是%d\n", n);
  return 0;
}



相关文章
|
人工智能 BI C语言
【C语言】求两个数的最大公约数和最小公倍数(极简代码版)
【C语言】求两个数的最大公约数和最小公倍数(极简代码版)
186 1
|
算法 C语言
C语言求最大公约数
C语言求最大公约数
|
10月前
|
算法 C语言
【C语言程序设计——函数】利用函数求解最大公约数和最小公倍数(头歌实践教学平台习题)【合集】
本文档介绍了如何编写两个子函数,分别求任意两个整数的最大公约数和最小公倍数。内容涵盖循环控制与跳转语句的使用、最大公约数的求法(包括辗转相除法和更相减损术),以及基于最大公约数求最小公倍数的方法。通过示例代码和测试说明,帮助读者理解和实现相关算法。最终提供了完整的通关代码及测试结果,确保编程任务的成功完成。
420 15
【C语言程序设计——函数】利用函数求解最大公约数和最小公倍数(头歌实践教学平台习题)【合集】
|
10月前
|
算法 C语言
【C语言程序设计——循环程序设计】求解最大公约数(头歌实践教学平台习题)【合集】
采用欧几里得算法(EuclideanAlgorithm)求解两个正整数的最大公约数。的最大公约数,然后检查最大公约数是否大于1。如果是,就返回1,表示。根据提示,在右侧编辑器Begin--End之间的区域内补充必要的代码。作为新的参数传递进去。这个递归过程会不断进行,直到。有除1以外的公约数;变为0,此时就找到了最大公约数。开始你的任务吧,祝你成功!是否为0,如果是,那么。就是最大公约数,直接返回。
255 18
|
算法 C语言
C语言中的最大公约数和最小公倍数,居然如此简单!
C语言中的最大公约数和最小公倍数,居然如此简单!
|
存储 安全 C语言
【C语言刷题每日一题】——求最大公约数(带数学计算过程详解)
【C语言刷题每日一题】——求最大公约数(带数学计算过程详解)
|
C语言
C语言---最大公约数和最小公倍数的求法
C语言---最大公约数和最小公倍数的求法
225 0
|
C语言
最大公约数和最小公倍数(c语言)
最大公约数和最小公倍数(c语言)
C语言每日一练——Day01:求最大公约数(三种方法)
C语言每日一练——Day01:求最大公约数(三种方法)
|
算法 C语言
C语言求最大公约数和最小公倍数
C语言求最大公约数和最小公倍数
272 0