致敬欧几里得大佬---辗转相除法

用c语言来实现求取最大公约数

介绍一下最大公约数:我的理解是两个整数,能够获得一个最大的整数,使得这两个整数能被各自整除。

这是百度的翻译(几个整数中公有的约数,叫做这几个数的公约数;其中最大的一个,叫做这几个数的最大公约数

何为辗转相除法?分析辗转:可以理解为反复使用的意思;涉及反复,那不得不提到语言中的循环语句,这里不做过多介绍。

欧几里得算法又称辗转相除法,是指用于计算两个非负整数a,b的最大公约数。应用领域有数学和计算机两个方面。计算公式gcd(a,b) = gcd(b,a mod b)。

这里用百度的例子

求gcd(319,377):

∵ 319÷377=0(余319)

∴(319,377)=(377,319);

∵ 377÷319=1(余58)

∴(377,319)=(319,58);

∵ 319÷58=5(余29)

∴ (319,58)=(58,29);

∵ 58÷29=2(余0)

∴ (58,29)= 29;

∴ (319,377)=29。

#include <stdio.h>
int main()
{
    int a,b,c;//a,b作为两个整数,c反复使用,有点像找个中间变量t那个
    scanf("%d %d",&a,&b);
    while(c=a%b)//c=a%b这是辗转相除法的内容,注意这里是%而不是/,初学者易错;
    {
        //下一步实现辗转
        a=b;//将除数的值赋值给被除数 小知识--被除数(除以)除数=结果
        b=c;//将余数的值赋值给被除数 
        //这样你会发现a,b进入了一个新的值,因此利用循环进行 进一步运算
        //在哪里打印呢?
        //假如放在while循环里,而c为0(假),则while循环被跳过,打印个寂寞

    }
    //打印谁?
    //1.我们其实可以采用特殊值法确定打印谁,比如将a=40,b=20;则c=0;跳出while,b为最大公约数
    //因此在使用的时候打印b
    //2.程序的最后一定是相除余下0,即退出while,此时除数与被除数中最小的数即为最大公约数
    //例如58/29==2余0;
    printf("%d\n",b);//找出最大公约数
    return 0;
}

代码和例子一定要结合看!

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值