ARTICLE DETAIL

建站实战干货

来自一线的建站与推广经验沉淀,每一条都经过真实交付验证。

算法——数论——GCD和LCM

2026/8/16 1:54:43 拓冰建站 浏览量
算法——数论——GCD和LCM

目录

GCD(最大公约数)

 1、欧几里得算法

LCM(最小公倍数)

一、试题 算法训练 抗击虫群


GCD(最大公约数)

  • 整数 a 和 b 的最大公约数是指能同时整除 a 和 b 的最大整数,记为 gcd(a,b)
  • -a的因子和a的因子相同,例如gcd(15,18) = gcd(-15,-18) = 3
  • 性质:
  • 裴蜀定理:

 1、欧几里得算法

  • 用辗转相除法求GCD,即 gcd(a,b)=gcd(b,a mod b)
  • 代码逻辑:
    • 如果 a 能够整除 b,那么 b 就是 a 和 b 的最大公约数;
    • 否则,最大公约数即为 b 和 a 除以 b 的余数的最大公约数。
    • 我们重复使用这个逻辑,将原先的 b 替换为余数,并将原先的余数替换为新的 b,直到余数变为 0。此时,b 就是最大公约数。

  • 另外还有两种算法:更相减损术和Stein算法,用得较少
public static int gcd(int a,int b){return b!=0 ? gcd(b , a % b) : a;
}

LCM(最小公倍数)

  •  a 和 b 的最小公倍数表示为 lcm(a,b)
  • 推论:gcd(a,b) * lcm(a,b) = ab(具体过程略,该公式为结论,说明了LCM和GCD之间的关系)
public static int lcm(int a,int b){return a / gcd(a , b) * b;//如果先作乘法可能会溢出
}

一、试题 算法训练 抗击虫群

 分析:

  • 每次都是加 p 的药物量,不能多不能少,(n+m)% p == 0,而且刚好加满两个容器
  • 要快,即是 p 的数值要尽可能大,但最后一勺 p 不能超出容器
  • 综上,求 n 和 m 的最大公约数,使用欧几里得算法
  • 建议先去系统、完整地学习一下这个知识点,再回来处理题目
package no1_1;
import java.util.*;class Main {public static void main(String[] args){Scanner sc=new Scanner(System.in);while(sc.hasNextLine()) {int n = sc.nextInt();int m = sc.nextInt();sc.nextLine();//换行int p=gcd(n,m);System.out.println(p);}}public static int gcd(int a,int b) {//欧几里得算法计算最大公约数return b!=0?gcd(b,a%b):a;}
}