输入两个正整数m和n,求其最大公约数和最小公倍数。
①遍历
#include<stdio.h>
int main()
{
int m,n,x,i,j;
scanf("%d %d",&m,&n);
x=m<n?m:n;
for(i=x;i>0;i--)
{
if(m%i==0&&n%i==0)
{
printf("最大公约数:%d\n",i);
break;
}
}
for(j=1;j<=n;j++)
{
if(j*m%n==0)
{
printf("最小公倍数:%d",j*m);break;
}
}
return 0;
}
②辗转相除法
#include "stdio.h"
int main()
{
int p,r,n,m,temp;
scanf("%d %d",&n,&m);
if (n <m) {
temp=n;
n=m;
m=temp;
}
p=n*m;
while(m!=0) {
r=n%m;
n=m;
m=r;
}
printf("最大公约数:%d\n",n);
printf("最小公倍数:%d",p/n);
return 0;
}
(采用函数计算)
#include "stdio.h"
int main()
{
int hcf(int,int);
int lcd(int,int,int);
int u,v,h,l;
scanf("%d %d",&u,&v);
h=hcf(u,v);
printf("hcf=%d\n",h);
l=lcd(u,v,h);
printf("lcd=%d",l);
return 0;
}
int hcf(int u,int v) {
int t,r;
if (v>u) {
t=u;
u=v;
v=t;
}
while (r=u%v) {
u=v;
v=r;
}
return(v);
}
int lcd(int u,int v,int h) {
return(u*v/h);
}