求最大公约数的两种常见算法
<1> 欧几里得算法
#include <iostream>
using namespace std;
int gcd (int m,int n);
int main(void)
{
int a,b;
cin >> a >> b;
cout << gcd(a,b);
return 0;
}
int gcd (int m,int n)
{
int temp;
while (n > 0)
{
temp = m % n;
m = n;
n = temp;
}
return m;
}<2>更相减损法#include <stdio.h>
int main (void)
{
int count,result;
int num1,num2;
count = 1;
scanf("%d %d",&num1,&num2);
while ((num1 % 2 == 0) && (num2 % 2 == 0)) // 判断两个数是否都是偶数,若是,则进行约简
{
num1 /= 2;
num2 /= 2;
count *= 2;
}
while (num1 != num2) // 较大数减去较小数,直到所得的减数和差相等
{
if (num1 > num2)
num1 -= num2;
else
num2 -= num1;
}
result = num1 * count;
printf("%d",result);
return 0;
}
本文介绍了两种求最大公约数的经典算法:欧几里得算法和更相减损法,并提供了详细的C/C++实现代码。
587

被折叠的 条评论
为什么被折叠?



