c语言设计最大公约数函数,利用该函数,设计求最大公倍数的函数

设计最大公约数函数,利用该函数,设计求最大公倍数的函数

下面是我的一个实现,供你参考:


#include <stdio.h>

/** 求最大公约数
     * 辗转相减法
     * 算法参考:
     *     https://blog.csdn.net/yxdayd/article/details/44774015
    
     */
     
int gcd(int a,int b){
    
    while(1){
        if(a>b){
            a-=b;
        }else if(a<b){
            b-=a;
        }else{
            return a;
        }
    }
} 

    /* 求最小公倍数
     * 算法参考:
     https://bbs.csdn.net/topics/90155042?list=1079159 
     作者:Norris_Zhang 
     * */

int lcm(int a,int b){
    int gbs = a*b/gcd(a,b);
    return gbs; 
}

int main(void){

    int a,b;
    printf("请输入两个需要计算最大公约数的整数:");
    scanf("%d %d",&a,&b); 
    printf("他们的最大公约数是%d.\n",gcd(a,b));    
    
    printf("请输入两个需要计算最小公倍数的整数:");
    scanf("%d %d",&a,&b);
    printf("他们的最小公倍数是:%d.\n",lcm(a,b));
    
    return 0;
}

 \\使用递归
#include <stdio.h>
int hcf(int n1, int n2);
int main()
{
int n1, n2;
   printf("输入两个正整数,空格进行分割: ");
   scanf("%d %d", &n1, &n2);
 
   printf("%d 和 %d 的最大公约数为 %d", n1, n2, hcf(n1,n2));
   return 0;
}
int hcf(int n1, int n2)
{
if (n2 != 0)
return hcf(n2, n1%n2);
    else
return n1;
}
#include <stdio.h> \\使用循环
int main()
{
int n1, n2, i, gcd;
 
    printf("输入两个正整数,空格分隔: ");
    scanf("%d %d", &n1, &n2);
 
    for(i=1; i <= n1 && i <= n2; ++i)
{
if(n1%i==0 && n2%i==0)
gcd = i;
    }
printf("%d 和 %d 的最大公约数是 %d", n1, n2, gcd);
 
    return 0;
}

int gcd(int a,int b){
  if(b==0) return a;
  return gcd(b%a,a);
}