输入 a 和 b , 请返回 a 和 b 的最大公约数。
数据范围:
进阶:空间复杂度 ,时间复杂度
3,6
3
8,12
4
a和b的范围是[1-109]
public int gcd (int a, int b) { // write code here int num=Math.min(a,b) ,temp=num ,index=1; while(temp>1){ temp=num/index++; if(a%temp==0 && b%temp==0){ break; } } return temp; // --------------------------------------------------------------- if(a%b==0){ return b; } return gcd(b ,a%b); }
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 if (b == 0) { return a; } return a > b ? gcd(b, a % b) : gcd(a, b % a); } }
if (b % a == 0) { return a; } int minNum = Math.min(a, b); for (int i = minNum; i >= 1; i--) { if (a % i == 0 && b % i == 0) { return i; } } return 0;
if(b == 0){ return a; } return gcd(b,a % b);
int x = 0; while (a % 2 == 0 && b % 2 == 0) { a = a / 2; b = b / 2; x++; } if (a == b) { if (x != 0) { return a * (int) Math.pow(2, x); } return a; } int max = Math.max(a, b); int min = Math.min(a, b); if (x != 0) { return gcd(max - min, min) * (int) Math.pow(2, x); } else { return gcd(max - min, min); }
if (a==0||b==0) return a==0?a:b; if(a%b==0) return b; return gcd(b,a%b);2.更相减损法
if (a<b){ int tmp=a; a=b; b=tmp; } if (a==0||b==0)return a==0?a:b; if (a-b==0) return a; return gcd(b,a-b);
public int gcd (int a, int b) { // write code here if(a%b==0||b%a==0) { return a>b? b:a; } else { int max=0; for(int i=1;i<=(a>b?b:a);i++) { if(a%i==0&&b%i==0) { max=i; } } return max; } }