最大公约数
计算是计算机最大的优势,对于我们来说,可以把一些比较复杂的计算交由计算机完成,今天我要提及的便是用计算机求取最大公约数。
简单暴力法:
#include<stdio.h>
int main()
{
int a,b;//a>b
scanf("%d%d",&a,&b);
for(int i = b; i >= 1; i--)
{
if(a % i == 0 && b % i == 0) printf("%d",i),break;
}
return 0;
}
辗转相除法
这是世界上最早的算法,是由古希腊的欧几里得提出的。
int GCD(int a,int b)
{
return b==0?a:GCD(b,a%b);
}
更相减损术
这种算法是由东汉数学家刘徽说明的。
int GCD(int a,int b)
{
while(a!=b)
{
if(a>b)
a-=b;
else
b-=a;
}
return a;
}
当然,并不是说后两者就会比穷举法更方便,而要根据实际情况分析。
顺带一提
lcm(最小公倍数) = a * b/ gcd(a,b)