求最大公约数的两种常见算法
<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;
}