gcd辗转相除算法

本文介绍了使用递归和三元运算符实现的欧几里得算法,用于计算两个整数的最大公约数(GCD),并详细解释了算法背后的逻辑和工作原理。
摘要由CSDN通过智能技术生成

2024年1月3日18:12:14还在玩ginka 目前的话香蕉会他们这种奇怪的算法 

2024年1月3日17:34:13完成了辗转相除解决了幕布的算法,这样艰巨的任务是否能交给我来完成呢?一切都是未知数。朋友,答案在空中飘荡。

//建立一个
#include<stdio.h>
int main()
{
    int gcd(int a,int b);
    int x,y,t;
    while(scanf("%d%d",&x,&y),x||y)
    {
        t=gcd(x,y);
        printf("%d\n",(x/t)*(y/t));
    }
    return 0;
}
int gcd(int a,int b)
{
    return b==0 ? a : gcd(b,a%b);
}

        

这边还要掌握三元运算符

这边是递归算法的实现过程

这段代码是一个递归函数的一部分,用于计算两个整数的最大公约数(GCD)。这是使用欧几里得算法的一个实现。

代码解释如下:

c
return b==0 ? a : gcd(b,a%b);
b==0 ? a : ...: 这是一个三元运算符。它的工作原理是:如果 b 等于0,则返回 a 的值;否则返回 ... 的值。
gcd(b,a%b): 这是递归调用。它再次调用 gcd 函数,但是这次使用的参数是 b 和 a % b。这里的 % 是取余操作,它返回 a 除以 b 的余数。
这个递归调用的逻辑基于以下事实:两个整数的最大公约数与较小的数和两数的余数之间的最大公约数是相同的。例如,考虑数字 48 和 18:

GCD(48, 18) = GCD(18, 48 % 18) = GCD(18, 12)
GCD(18, 12) = GCD(12, 18 % 12) = GCD(12, 6)
GCD(12, 6) = GCD(6, 12 % 6) = GCD(6, 0)
在上面的例子中,当余数为0时,这意味着较小的数(在这里是6)就是两数的最大公约数。

这个递归过程会一直持续,直到找到最大公约数,然后该值会被返回。

另外一种可能是得到这种东西

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值