相减法
#include<stdio.h>
int main()
{
int p,q,m,n;
printf("请输入两个正整数,两者间用逗号隔开:\n");
scanf("%d,%d", &p, &q);
m=p;
n=q;
while(m!=n)//当两者不相等时,采用相减法求最大公约数
{
if(m>n)
m=m-n;
else
n=n-m;
}
printf("他们的最大公约数是:%d\n",m);
printf("他们的最小公倍数是:%d\n",p*q/m);//利用最大公约数与最小公倍数间的关系得到最小公倍数
}
辗转相除法
#include <stdio.h>
int main()
{
int m,n,k,a,b;
printf("请输入2个正整数,两者间用逗号隔开:\n");
scanf("%d,%d",&m,&n);//输入两个数字时用逗号隔开
//开始判定
if(m<=0||n<=0)//如果两者中在任意一个为小于等于0
{
printf("输入有误,请您输入两个 正!整!数!\n");
}
else
{
//交换两个数,始终让较大的一个等于m,较小的一个数等于n
if(m<n)
{
k=m;
m=n;
n=k;
}
a=m;
b=n;
//利用辗转相除法,直到b等于0为止
while(b!=0)
{
k=a%b;
a=b;
b=k;
}
printf("最大公约数:%d\n",a);
printf("最小公倍数:%d\n",m*n/a);
}
}
穷举法
#include<stdio.h>
int main()
{
int a,b,c;
printf("请输入两个正整数:\n");
scanf("%d,%d",&a,&b);
//交换两个数,始终让较大的一个等于a,较小的一个数等于b
if(a<b)
{
c=a;
a=b;
b=c;
}
//直到a和b除以c余数都为0结束
for(c=b;a%c||b%c;c--);
printf("他们的最大公约数是:%d\n",c);//此时c就是两者的最大公约数
printf("他们的最小公倍数是:%d\n",a*b/c);
}