这里提供了两种方法,你可以测试下哪种方法效率更高。
方法一:运用了辗转相除法
#include<iostream>
using namespace std;
int gcd(int a,int b)
{
if(a%b == 0) return b;
if(b > a%b)
gcd(b,a%b);
else
gcd(a%b,b);
}
int main()
{
int a,b;
while(cin>>a>>b)
{
cout<<gcd(a,b)<<endl;
}
return 0;
}
方法二:欧几里得算法
</pre><pre>
#include<iostream>
using namespace std;
int gcd(int a,int b)
{
int temp;
while(a != b)
{
if(a > b)
{
temp = b;
b = a - b;
a = temp;
}
else
{
temp = a;
a = b - a;
b = temp;
}
}
return b;
}
int main()
{
int a,b;
while(cin>>a>>b)
{
cout<<gcd(a,b)<<endl;
}
return 0;
}
扩展:如需要求a,b最小公倍数只需a/gcd(a,b)*b即可