结论
若a,b都为0,没有最大公约数;其中一个不是0,则他就是最大公约数;两个都不为0;则a%b和b的最大公约数也是a,b的最大公约数,因此可以一直循环到第二种情况从而求出最大公约数。
代码
**递归**
#include<iostream>
using namespace std;
long long gcd(long long a, long long b)
{
if (b == 0)return a;
else return gcd(b, a%b);
}
int main()
{
long long a, b;
cin >> a >> b;
if (!a && !b)cout << "No anwser";
else
{
cout << gcd(a, b);
}
system("pause");
return 0;
}
非递归
#include<iostream>
using namespace std;
long long gcd(long long a,long long b)
{
while(b)
{
long long temp=a%b;
a=b;b=temp;
}return a;
}
int main()
{
long long a,b;
cin>>a>>b;
if(!a&&!b)cout<<"No anwser";
else cout<<gcd(a,b);
system("pause");
return 0;
}