求最大公约数伪代码

求最大公约数伪代码

上网查找什么是求两个数的最大公约数的欧几里得算法(辗转相除法),提交算法说明和网上链接

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

复制代码
#include<stdio.h>
unsigned int MaxCommonFactor(int a,int b)
{
    if(a % b == 0)
        return b;
    return MaxCommonFactor(b, a % b);
}
unsigned int Gcd(unsigned int M,unsigned int N)
{
    unsigned int Rem;
    while(N > 0)
    {
        Rem = M % N;
        M = N;
        N = Rem;
    }
    return M;
}
int main(void)
{
    int a,b;
    scanf("%d %d",&a,&b);
    printf("the greatest common factor of %d and %d is ",a,b);
    printf("%d\n",Gcd(a,b));
    printf("recursion:%d\n",MaxCommonFactor(a,b));
    return 0;
}
复制代码

参考https://baike.baidu.com/item/欧几里得算法/1647675

参考教材,用伪代码(英语或汉语)实现欧几里得算法(辗转相除法),提交伪代码

 我参考的是书中关于进制转换的伪代码和C语言中辗转相除法的代码

复制代码
Read num1
Read num2
Set m to max(num1,num2)
Set n to min(num1,num2)
Set quotient to m REM n
While (quotient!=0)
   Set m to n
   Set n to quotient
   Set quotient to m REM n
Write
"The answer is",n
复制代码

选择几组数据,手动走一下伪代码,测试你写的伪代码是否正确,提交测试过程截图

复制代码
第一组
输入num1=20 num2=30
则n=20,m=30,q=10
q不等于0
m=20 n=10 q=0跳出循环
The answer is 10
第二组
输入num1=28 num2=7
则n=7 m=28 q=0不进入循环
The answer is 7
第三组
输入num1=37 num2=29
则m=37 n=29 q=8
q不等于0
m=29 n=8 q=5
m=8 n=5 q=3
m=5 n=3 q=2
m=3 n=2 q=1
m=2 n=1 q=0跳出循环
The answer is 1
复制代码

 

posted @   20221408柳笛  阅读(40)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 分享一个免费、快速、无限量使用的满血 DeepSeek R1 模型,支持深度思考和联网搜索!
· 基于 Docker 搭建 FRP 内网穿透开源项目(很简单哒)
· 25岁的心里话
· ollama系列01:轻松3步本地部署deepseek,普通电脑可用
· 按钮权限的设计及实现
点击右上角即可分享
微信分享提示