自定义GCD函数
辗转相除法
欧几里得算法又称辗转相除法,是指用于计算两个非负整数a,b的最大公约数。
具体实现方法是:用较小数除较大数,再用出现的余数(第一余数)去除除数,再用出现的余数(第二余数)去除第一余数,如此反复直到最后余数是0为止,最后的除数就是这两个数的最大公约数
c代码实现GCD函数
int GCD(int a,int b) //a和b的最大公约数
{
if(b==0)
retuan a;
else
GCD(b,a%b);
}
c++中的__gcd()函数
algorithm中内置的函数
#include<algorithm>
using namespace std;
函数原型
int __gcd(int a,int b)
也是返回a和b的最大公约数。(听说long long也可以
关于最小公倍数
两数的最小公倍数等于两数的乘积除以两数的最大公约数
简例
SDTBU 1139–最大公约数
AC代码
#include<stdio.h>
#include<string.h>
#include<stdlib.h>
#include<math.h>
#include<algorithm>
#include<iostream>
#define LL long long
#define INF 0x3f3f3f3f
const int MAX=1e6+10;
using namespace std;
int GCD(int a,int b)
{
if(b==0)
return a;
else
GCD(b,a%b);
}
int main()
{
int n1,n2;
while(~scanf("%d%d",&n1,&n2))
printf("%d\n",GCD(n1,n2)); //或者printf("%d\n",__gcd(n1,n2));
return 0;
}
SDTBU 1140–最小公倍数
AC代码
#include<stdio.h>
#include<string.h>
#include<stdlib.h>
#include<math.h>
#include<algorithm>
#include<iostream>
#define LL long long
#define INF 0x3f3f3f3f
const int MAX=1e6+10;
using namespace std;
int GCD(int a,int b)
{
if(b==0)
return a;
else
GCD(b,a%b);
}
int main()
{
int n1,n2;
while(~scanf("%d%d",&n1,&n2))
{
int n3=GCD(n1,n2); //int n3=__gcd(n1,n2);同理
if(n1<n2)
swap(n1,n2);
printf("%d\n",n1/n3*n2);
}
return 0;
}