定义
整数a和b的最大公约数是指能同时整除a和b的整数,记作gcd(a,b)。
性质
1、gcd(a,b)=gcd(a,b+a)=gcd(b+ka);
2、gcd(ka,kb)=k*gcd(a,b);
3、gcd(a,b,c)=gcd(gcd(a,b),c);
4、若gcd(a,b)=d,则gcd(a/d,b/d)=1即a/d与b/d互素。
证明略(可能以后会补)。
代码
//最大公约数
#include <bits/stdc++.h>
using namespace std;
int gcd(int a,int b){
if(a<b){
int c=a;
a=b;
b=c;
}
return b==0?a:gcd(b,a%b);//b==0,则返回a,否则递归计算;
}
int main(){
int x=4,y=12;
//手写函数
cout<<gcd(x,y)<<endl;
//直接调用函数
cout<<__gcd(x,y)<<endl;
cout<<__gcd(-4,12)<<endl;//结果:-4
cout<<__gcd(4,-12)<<endl;//结果:4
cout<<__gcd(-4,-12)<<endl;//结果:-4
return 0;
}
注:c++语言直接调用__gcd(a,b),若a是负数,则结果为负,否则结果为正。