c语言求最大公约数的三种方法

##一:辗转相除法(最常见的一种方法)
公式:gcd(i,j) = i;(b = 0)
思路:
(1)判断两数大小,如果i > j;直接进行下一步;若i < j;交换两数值;
(2)i 对 j 求余,如此循环,直至 j = 0;
(3)返回 i 的值,此时 i 即为最大公约数。
代码如下:

#include<stdio.h>
#include<windows.h>
#pragma warning(disable:4996)//因为是vs编译器,不承认scanf函数,其他编译器可忽略
int gcd(int i, int j)
{
 int a;
 if (i < j)//交换变量值
 {
  a = i;
  i = j;
  j = a;
 }
 while (j != 0){
  a = i % j;
  i = j;
  j = a;
 }
 return i;
}
int main()
{
 int x;
 int y;
 scanf("%d %d", &x, &y);
 int c = gcd(x, y);
 printf("%d\n", c );
 system("pause");
 return 0;
}

##二:穷举法(最容易理解的一种方法)
思路:1)找出 i ,j中较小的数,定义为a;
(2)从较小的数开始,分别用i,j对a求余,如果结果都为零,则此时的a为最大公约数,若不是都为零,则a–,直至都为零,a 即为最大公约数
代码:

#include<stdio.h>
#include<windows.h>
#pragma warning(disable:4996)
int main()
{
 int i;
 int j;
 int a = 0;
 printf("输入两个数字:\n");
 scanf("%d %d", &i, &j);
 if (i < j)//判断较小的数
  a  = i;
 else
  a = j;
 while (!(i%a == 0 && j%a == 0))//从大到小第一个满足条件的值即为结果
 {
  a--;
 }
 printf("%d\n", a);
 system("pause");
 return 0;
}

##三:更相减损法
思路:
(1):任意给定两个正整数,判断是否都是偶数,若是,则用2约简;不是则下一步;
(2):用大数减小数,然后把差与小的数比较,再以大数减小数,直至减数与差相等,所得差和减数即为最大公约数。
代码:

#include<stdio.h>
#include<windows.h>
#pragma warning(disable:4996)
int gcd(int i, int j)//大数减小数
{
 while (i != j){
  if (i > j)
   i = i - j;
  else
   j = j - i;
 }
 return i;
}
int main()
{
 int i;
 int j;
 printf("输入数字:\n");
 scanf("%d %d", &i, &j);
 if (i != 2 && j != 2){
  while (i % 2 == 0 && j % 2 == 0){
   i = i / 2;
   j = j / 2;
  }
 }
 int a = gcd(i, j);
 printf("%d\n", a);
 system("pause");
 return 0;
}
  • 12
    点赞
  • 62
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值