求两个数的最大公约数

发布时间 2023-11-05 00:59:56作者: 20231420

1.算法:欧几里得算法(辗转相除法)

百度百科,算法为:以除数和余数反复做除法运算,当余数为 0 时,取当前算式除数为最大公约数。

百度百科连接:https://baike.baidu.com/item/欧几里得算法/1647675

2.伪代码

好像空格在行首没效果,就用。。充当空格了。

Write "请输入两个数(前大后小):"
Read num1
Read num2
While(a is not zero)
。。Set a to num1 % num2
。。Set num1 to num2
。。Set num2 to a
Print"num1"

3.伪代码测试

我分别测试了求72和48的最大公约数和求93和37的最大公约数,如下图所示。

4.C语言程序

稍微改动了一下,使得两个数字没有顺序要求。
代码:

#include <stdio.h>
#include <stdlib.h>

int main()
{
    int num1,num2,c,a=1;
    printf("请输入两个正整数:");
    scanf("%d %d",&num1,&num2);
    if(num1<num2){
        c=num1,num1=num2,num2=c;
    }
    while (a!=0){
    a=num1%num2;
    num1=num2;
    num2=a;
    }
    printf("最大公约数为:%d\n",num1);
    return 0;
}

运行结果: