【学习总结】整数的基本性质与运用

本文详细介绍了两种求解最大公约数的方法:暴力枚举法与辗转相除法,并通过实例演示了如何使用这些算法。同时,文章还讲解了如何利用最大公约数来求解最小公倍数。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

一、求最大公约数

一个既能整除 a 又能整除 b 的最大整数。如,求 1540最大公约数.

方法一:暴力枚举

  • 起始条件:最大公约数肯定不大于Math.min(A,B),循环的起始条件(i=a)很容易确定。
  • 判断条件:相信理解最大公约数定义也不难确定(a%i==0 && b%i==0)
public class Main {
  public static void gcd0() {
    int a = 15, b = 40;
    int min = Math.min(a, b);
    
    for(int i = min; i >= 1; --i) {
      if(a % i==0 && b % i==0)  { 
        System.out.print(i + "、"); 
        break;      				//因为是最大公约数,所以要提前退出循环 --> 5
      }
    }
    System.out.println(gcd(15, 40));
  }
}

算法大致思路就是,不断地缩减a的值,直到 >= 1


方法二:更相减损法

出自《九章算术》,适用于任何需要求最大公约数的场合。

while(a != b) {
  if (a > b) a = a-b;
  else 		 b = b-a;
}
printf("%d\n",a);

求法二:辗转相除法

在这里插入图片描述
在这里插入图片描述
知道两个数的最大公约数还可以算出两个数之间的最小公倍数。
在这里插入图片描述
*一句话总结 :用 x 去对 yx\cfrac{y}{x}xy 的余数取模。

递归

public static int gcd(int x, int y) {
    return x == 0 ? y : gcd(y%x, x);     //5
}

迭代

int gcd(int x, int y) {
	int c = 0;
	while (x != 0) {
		int t = x;
		x = y % x;
		y = t;
	}
	return y;
}

mm:x==0?y:gcd(y%x, x)


二、求最小公倍数

求 x 和 y 的最小公倍数,先求 x 和 y 的最大公约数,然后用 x × y 的积除以 gcd(x,y)

int t = x * y
int res = t / gcd(x, y);
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值