方法一:利用定義法求最大公因數(shù)和最小公倍數(shù)
#include<stdio.h>
int main()
{
int a,b,i,j;
int max=0;
scanf("%d%d",&a,&b);
for(i=a;;i++)//求最小公倍數(shù)
{
if(i%a==0&&i%b==0)//用大于等于a和b的數(shù)i(i大于等于a和b,無(wú)上限)分別除以a和b,同時(shí)除盡的第一個(gè)數(shù)即為最小公倍數(shù)
break;//然后循環(huán)結(jié)束
}
for(j=1;j<=a;j++)//求最大公約數(shù)
{
if(a%j==0&b%j==0)//讓a和b分別除以j(j從一開(kāi)始,j有上限要小于等于a或b)
//利用j++,如果a和b能同時(shí)除盡j
{
if(max<j)//再判斷j是不是小于a或b的最大公約數(shù),不是則賦值最大值
max=j;//這樣求出來(lái)的max即為最大公約數(shù)
}
}
printf("%d %d\n",i,max);//最后最大公約數(shù)用max表示了
return 0;
}
方法二:最小公倍數(shù)求法同上,最大公約數(shù)方法不同
#include<stdio.h>
int main()
{
int a,b,i,j;
int max=0;
scanf("%d%d",&a,&b);
for(i=a;;i++)
{
if(i%a==0&&i%b==0)//求最小公倍數(shù)(方法同法一)
break;
}
for(j=a;;j--)//求最大公約數(shù)
{
if(a%j==0&&b%j==0)//還是用a和b除以j(j直接賦值為a或b,示例賦值為a(b也可以的))
//利用j--,第一個(gè)a和b同時(shí)除盡的數(shù)j即為最大公約數(shù)
break;//然后直接結(jié)束循環(huán)即可
}
printf("%d %d\n",i,j);
return 0;
}
方法一方法二的結(jié)果示例如下
?
方法三:利用輾轉(zhuǎn)相除法求最大公約數(shù)和最小公倍數(shù)
#include<stdio.h>
int main(void)
{
int m,n,t,a,b;
t=0;
scanf("%d %d",&m,&n);
a=m;
b=n;//先把m和n分別賦值給a和b,用來(lái)求最小公倍數(shù)
//法(1)
/*
while(t=m%n,t!=0)//限制條件有兩個(gè)
//求出最小公約數(shù)和最大公倍數(shù)的數(shù)值與m和n大小無(wú)關(guān),所以不用考慮是m%n還是n%m,結(jié)果一樣
{
m=n;
n=t;
}
printf("最大公約數(shù)是:%d\n",n);//最后n為最大公約數(shù)
printf("最小公倍數(shù)是:%d\n",a/n*b);
*/
//法(2)
while (n != 0)//一個(gè)限制條件
{
t = m % n;//t的賦值在限制條件里面
m = n;
n = t;
}
printf("最大公約數(shù)是:%d\n", m);//最后m為最大公約數(shù)
printf("最小公倍數(shù)是:%d\n", a / m * b);
//最小公倍數(shù)求法和上邊一樣(除以n(最大公因數(shù))變成除以m)
return 0;
}
法(1)結(jié)果示例如下:
?法(2)示例結(jié)果如下:
文章來(lái)源:http://www.zghlxwxcb.cn/news/detail-731445.html
?以上就是用C語(yǔ)言循環(huán)和循環(huán)之前的章節(jié)知識(shí)總結(jié)的最大公約數(shù)和最小公倍數(shù)的求法,也可以利用函數(shù)來(lái)求公因數(shù)和公倍數(shù),但核心部分還是一樣的啊。文章來(lái)源地址http://www.zghlxwxcb.cn/news/detail-731445.html
到了這里,關(guān)于【C語(yǔ)言】求最大公約數(shù)和最小公倍數(shù)的文章就介紹完了。如果您還想了解更多內(nèi)容,請(qǐng)?jiān)谟疑辖撬阉鱐OY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!