若 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;
}