目录
最近听了关于用C语言求解两个数的最大公约数和最小公倍数的课,想着将学到的方法发在博客里,一方面可以分享给大家,一方面自己也算做了笔记,以后复习的时候可以用到,如果你们有更好的方法也可以在本文下方评论,咱们互相学习。
最大公约数:
方法一:枚举法
找出m与n中的最小数,使用m与n对其求余,如果结果都为零,则最小的那个数为两个数的最小公约数,如果不是,则最小数自减,一直到求余结果为零为止。
源代码:
#include <stdio.h>
int main()
{
int m=0;
int n=0;
scanf("%d %d",&m,&n);
int c=0;//存储最小值
//找出两个数中最小的那个
if(m>n)
{
c=n;
}
else
{
c=m;
}
//m与n对最小值求余,直至结果为零
while(1)
{
if(m%c == 0 && n%c == 0)
{
printf("最大公约数为:%d\n",c);
break;
}
else
{
c--;
}
}
return 0;
}
方法二:辗转相除法
t=m%n,如果t为零,则最大公约数为n,如果不是零,则将n赋给m,将t赋给n,继续求m%n,直至结果为零,最后n为两个数的最大公约数。
源代码:
#include <stdio.h>
int main()
{
int m=0;
int n=0;
scanf("%d %d",&m,&n);
int t=0;
while(t=m%n)
{
m=n;
n=t;
}
printf("最大公约数为:%d",n);
return 0;
}
最小公倍数:
方法一:枚举法
找出m与n中最大的那个数,对m与n求余,如果结果为零,则最大数为其最小公倍数,如果不为零,则让最大数自增,一直到求余结果为零为止。
源代码:
#include <stdio.h>
int main()
{
int m=0;
int n=0;
scanf("%d %d",&m,&n);
int c=0;
//找出两个数中最大的那个
if(m>n)
{
c=m;
}
else
{
c=n;
}
while(1)
{
if(c%m == 0 && c%n == 0)
{
printf("最小公倍数为:%d",c);
break;
}
else
{
c++;
}
}
return 0;
}
方法二:公式法
最小公倍数=m*n/最大公因数,所以我们上述求的最大公因数可以利用起来。
源代码:
#include <stdio.h>
int main()
{
int m=0;
int n=0;
scanf("%d %d",&m,&n);
int tem1=m;//用来存储最开始的m
int tem2=n;//用来存储最开始的n
int t=0;
while(t=m%n)
{
m=n;
n=t;
}
printf("最大公约数为:%d\n",n);
printf("最小公倍数为:%d\n ",tem1*tem2/n);
return 0;
}
以上就是求解两个数的最大公约数和最小公倍数的方法,希望可以帮到你哦~