求最大公约数和最小公倍数各两种求法
第一种:
最大公约数
#include<stdio.h>
int main()
{
int a,b;
int min;
scanf("%d%d",&a,&b);
if(a>b)
{
min = b;
}
else {
min = a;
}
int ret = 0;
int i;
for(i = 1;i<=min;i++)
{
if(a%i==0&&b%i==0)
{
ret = i;
}
}
printf("%d\n",ret);
return 0;
}
最小公倍数
#include<stdio.h>
int main()
{
int a,b;
int max;
scanf("%d%d",&a,&b);
if(a>b)
{
max = a;
}
else{
max = b;
}
for(int ret = max ; ;ret++)
{
if(ret % a==0&ret % b==0)
{
printf("%d",ret);
break;
}
}
return 0;
}
第二种:利用辗转相除法
辗转相除法的关键是一个数学事实
GCD(a, b) = GCD(b, a mod b)
#include<stdio.h>
int gcd(int a,int b)//最大公约数
{
if (b == 0) return a;
else return gcd(b,a%b);
}
int lcm(int a, int b)//最小公倍数
{
return a*b/gcd(b,a%b);
}
int main(){
int a,b;
scanf("%d%d",&a,&b);
printf("最大公约数为%d\n",gcd(a,b));
printf("最小公倍数为%d\n",lcm(a,b));
return 0;
}