题面
标题:
最大公约数
类别:
时间限制:
1 S
内存限制:
1000 Kb
问题描述:
最大公约数(GCD)指某几个整数共有因子中最大的一个,最大公约数具有如下性质,
gcd(a,0)=a
gcd(a,1)=1
因此当两个数中有一个为0时,gcd是不为0的那个整数,
当两个整数互质时最大公约数为1。
输入两个整数a和b,求最大公约数
输入说明:
输入为两个非负整数a和b(0<=a,b<10000),a和b之间用空格分隔,
输出说明:
输出其最大公约数
输入样例:
样例1输入
2 4
样例2输入:
12 6
样例3输入:
3 5
输出样例:
样例1输出
2
样例2输出
6
样例3输出
1
题解
最大公约数的求法有很多种,
以下是本题适用的满分代码
#include<iostream>
using namespace std;
inline int gcd (int a, int b)
{
if (b) while ((a %= b) && (b %= a));
return a + b;
}//a、b可以为0
//super_quick
int main()
{
int a, b;
cin >> a >> b;
cout << gcd(a, b);
return 0;
}
下面是几个求最大公约数的模板
inline int gcd(int a,int b)
{
int r;
while(b>0)
{
r=a%b;
a=b;
b=r;
}
return a;
}//normal
inline int gcd(int a,int b)
{
return b>0 ? gcd(b,a%b):a;
}
//quick
inline int gcd(int a,int b)
{
while(b^=a^=b^=a%=b);
return a;
}//a、b不能为0
//super_quick
inline int gcd(int a,int b)
{
if(b) while((a%=b) && (b%=a));
return a+b;
}//a、b可以为0
//super_quick
inline int gcd(int a,int b)
{
if(a%b==0)
return b;
else return (gcd(b,a%b));
}//quick
#include <algorithm>
inline int gcd(int a,int b) {
return __gcd(a,b);
}//slow
date:20240101