Java求最大公约数


利用BigInteger里的a.gcd(b)方法求a和b的最大公约数

	Scanner scanner = new Scanner(System.in);
	BigInteger x = scanner.nextBigInteger();//可以接收int类型
	BigInteger y = scanner.nextBigInteger();//也可以利用BigInteger.valueOf()将其他类型转换为BigInteger类型
	
	BigInteger gcd = x.gcd(y);	//BigInteger自带的求最大公约数的方法

	//BigInteger.valueOf()使用演示
	int a = 10;
	BigInteger b = BigInteger.valueOf(a);	

取两个数中最小,循环递减,都满足整除则为最大公倍数

自定义方法(多个数同样适用)

	public static int gcd (int a,int b) {
		int min = a<b?a:b;
		int gcd = 1;
	    for (int i = min;i >= 1;i --) {
	        if (a%i == 0 && b%i == 0) {
	            gcd = i;
	            break;
	        }
	    }
	    return gcd;
	}

辗转相除法递归实现

	public static int gcd (int a,int b) {
        if(b==0)
            return a;
        else
            return gcd(b,a%b);
	}

辗转相除法while循环实现

	public static int gcd (int a,int b) {
        int c;
        while (b!=0) {
        	c = a%b;
        	a = b;
        	b = c;
		}
        return a;
	}

更相减损术递归实现

	public static int gcd (int a,int b) {
        if (a==b) {
			return a;
		} else if (a>b) {
			a = a-b;
		} else {
			b = b-a;
		}
        return gcd(a, b);
        
	}

更相减损术while循环实现

	public static int gcd (int a,int b) {
        while (a!=b) {
        	if (a>b) {
				a = a-b;
			} else {
				b = b-a;
			}
		}
        return a;
	}
Logo

旨在为数千万中国开发者提供一个无缝且高效的云端环境,以支持学习、使用和贡献开源项目。

更多推荐