题目链接:
题目描述:
如果有一个自然数 a 能被自然数 b 整除,则称 a 为 b 的倍数, b 为 a 的约数。几个自然数公有的约数,叫做这几个自然数的公约数。公约数中最大的一个公约数,称为这几个自然数的最大公约数。
输入 a 和 b , 请返回 a 和 b 的最大公约数。
进阶:空间复杂度 O(1),时间复杂度O(logn)。
测试用例:
示例1:
输入:3,6
返回值:3
示例2:
输入:8,12
返回值:4
备注: a和b的范围是[1~10^9]
辗转相除法思路:
辗转相除法思路:
1、两个数a,b,如果b为0,计算结束,a是最大公约数
2、否则,让a除以b,a等于b,b等于余数
3、重复上述步骤
题解代码:
import java.util.*;
public class Solution {
/**
* 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可
*
* 求出a、b的最大公约数。
* @param a int
* @param b int
* @return int
*/
public int gcd (int a, int b) {
// write code here
while(b>0){
int c=a%b;
a=b;
b=c;
}
return a;
}
}