欧几里德定理
若 a=b×r+q 则gcd(a, b) = gcd(b, q).
GCD的两种实现方法,效率相近,但数据太大递归实现会出现崩溃。
时间复杂度O(logn)
#include<iostream>
using namespace std;
int gcd1(int a,int b) //递归实现
{
return a==0?b:gcd1(b%a,a);
}
int gcd2(int a,int b) //迭代实现
{
int c = a%b;
while(c)
{
a=b;
b=c;
c=a%b;
}
return b;
}
int main()
{
int n,m;
while(cin>>m>>n)
{
if(n<=0||m<=0)
break;
cout<<gcd1(n,m)<<endl;
cout<<gcd2(n,m)<<endl;
}
return 0;
}