辗转相除法的a%b运算性能较低
更相减损法,当两数相差很大时运算量也会加大
#include <iostream>
using namespace std;
int gcd(int a,int b)//辗转相除法
{
if(a<b)
{
int temp=a;
a=b;
b=temp;
}
int c;
while(b)
{
c=a%b;
a=b;
b=c;
}
return a;
}
int gcd1(int a,int b)//更相减损法
{
if(a==b) return a;
else if(a>b) return gcd1(a-b,b);
else return gcd1(b-a,a);
}
int gcd2(int a,int b)//从最大的数依次遍历(计算量很大)不安全
{
if(a>b){
for(int i=b;i>=2;i--)
{
if(a%i==0&&b%i==0)
return i;
}
}
else
for(int i=a;i>=2;i--)
{
if(a%i==0&&b%i==0)
return i;
}
}
int main()
{
int num1,num2;
cin>>num1>>num2;
cout<<gcd(num1,num2)<<endl;
cout<<gcd1(num1,num2)<<endl;
cout<<gcd2(num1,num2)<<endl;
return 0;
}