描述
如果有一个自然数 a 能被自然数 b 整除,则称 a 为 b 的倍数, b 为 a 的约数。几个自然数公有的约数,叫做这几个自然数的公约数。公约数中最大的一个公约数,称为这几个自然数的最大公约数。
输入 a 和 b , 请返回 a 和 b 的最大公约数。
数据范围:1≤a,b≤1091≤a,b≤109
进阶:空间复杂度 O(1)O(1),时间复杂度 O(logn)O(logn)
示例1
输入:
3,6
返回值:
3
方法一:暴力枚举法
import java.util.*;
public class Solution {
public int gcd (int a, int b) {
int max = a > b ? a:b;
int min = a < b ? a:b;
for(int i = min;i > 0;i--)
if(max % i == 0 && min % i == 0)
return i;
return 0;
}
}
//java中没有swap交换函数。
方法二:最小公约数法
import java.util.*;
public class Solution {
public int gcd (int a, int b) {
int max = a > b ? a:b;
int min = a < b ? a:b;
if(max % min ==0)
return min;
return gcd(max % min, min);
}
}