计算工具 · 数学计算

公约公倍数

多数 GCD/LCM

✓本地处理 · 不上传 ✓免费 · 无需登录 ✓无次数限制 累计 115 次使用
就绪 · 辗转相除 + 质因数分解对照,全程 BigInt 任意精度
第一节

关于本工具

About

数学作业里求最大公约数或最小公倍数,手算短除法容易错在步骤遗漏,尤其是三个数以上的情况。输入整数,这个工具直接给出 GCD 与 LCM 结果,并附带质因数分解过程——方便核对思路。所有计算在浏览器内完成,数据不上传服务器,适合学生自查作业或编程笔试前快速验证。

使用场景

壹

两班倒排班周期

工厂 A 班 12 天一轮、B 班 18 天一轮,生产主管想在两个班组同时休息的当天安排全厂设备检修。用本工具求 12 和 18 的最小公倍数得 36,确定每 36 天两班同时休息一次。主管直接按 36 天为周期制定年度检修计划,避免漏算或重复排休。

贰

仓库货架统一改造

仓库现有货架每 8 个格位一组,新采购的货架每 12 个格位一组。库管需要把两种货架拼接成完整的一排,且不能有半格。用本工具计算 8 和 12 的最小公倍数得 24,确定每 24 个格位为一个完整拼接单元,直接按此尺寸规划地面划线,避免浪费空间。

叁

蛋糕原料分装

烘焙坊有 120 克黄油和 90 克糖粉,要分装成若干份,每份黄油和糖粉重量相同且不剩料。用本工具求 120 和 90 的最大公约数得 30,确定每份含 30 克黄油和 30 克糖粉,正好分 4 份黄油和 3 份糖粉,无需额外称量。

肆

快递纸箱规格匹配

电商卖家有 48 个长条盒和 36 个方盒,要用相同大小的纸箱打包,每个纸箱装同一种盒子的整数个且不混装。用本工具求 48 和 36 的最大公约数得 12,确定每个纸箱装 12 个盒子,长条盒装 4 箱,方盒装 3 箱,刚好装满不浪费纸箱。

伍

学校课表循环排课

数学课每 6 天一次,物理课每 9 天一次,教务员需要找出两门课在同一天上的日期,以便安排连堂实验。用本工具求 6 和 9 的最小公倍数得 18,确定每 18 天两课重合一次。教务员据此在学期初就把实验课标在重合日,避免临时调课冲突。

对比矩阵

维度本工具在线数学工具站传统方法
隐私计算全在浏览器内完成,数据不上传服务器多数需将数字提交至后端计算纸笔或本地计算器,无网络泄露风险
速度输入即出结果,无网络延迟依赖服务器响应,高峰期可能卡顿手动计算耗时,尤其大数或多次计算
离线可用完全离线,断网也能用断网后无法访问完全离线
最大数值支持 JavaScript Number 安全整数范围(±2^53-1)部分限制更小(如 32 位整数),部分无上限但慢取决于心算或计算器位数,通常有限
注册收费无需注册,完全免费部分工具需注册或限制每日使用次数零成本(纸笔)或计算器硬件成本
第二节

使用指南

Getting Started

使用步骤

  1. 1在「计算最大公约数」输入框键入第一个整数(如 12),右侧「计算最小公倍数」输入框自动同步数值
  2. 2修改第二个输入框的数值(如 18),两个输入框下方分别显示 GCD 和 LCM 的实时计算结果,无需点击按钮
  3. 3点击任一结果区域(GCD 或 LCM),该数值自动复制到剪贴板,页面顶部出现「已复制」提示

输入输出示例

输入输出说明
12, 18GCD: 6, LCM: 36常规:两个较小正整数,验证基本最大公约数与最小公倍数计算
1, 100GCD: 1, LCM: 100常规:其中一个数为1,GCD必为1,LCM为另一数
0, 5GCD: 5, LCM: 0边界:0与正数,GCD定义为非零数,LCM为0(数学定义)
0, 0GCD: 0, LCM: 0边界:两个0,GCD与LCM均为0,部分工具可能报错
2147483647, 2147483647GCD: 2147483647, LCM: 2147483647边界:32位int最大值,验证大整数处理是否溢出
17, 19GCD: 1, LCM: 323易错:两个互质素数,GCD为1,LCM为乘积,易误以为GCD非1
-12, 18GCD: 6, LCM: -36易错:负数输入,不同工具对负数的处理口径不同(取绝对值或保留符号)

常见错误对照

1.求最大公约数时误用最小公倍数符号

✗ 错误GCD(12, 18) = 36
✓ 修复GCD(12, 18) = 6

GCD 是最大公约数,LCM 是最小公倍数。36 是 12 和 18 的 LCM,不是 GCD。混淆二者是初学数论最常见错误。

2.输入负数或零,工具未处理边界

✗ 错误GCD(-4, 6) 或 GCD(0, 5)
✓ 修复GCD(4, 6) = 2;GCD(5, 0) 通常定义为 5(部分实现报错)

标准数论中 GCD 定义在非负整数上,负数取绝对值后计算;0 与任何数的 GCD 是该数本身。但多数在线工具只接受正整数,输入负数或零会返回错误或未定义结果。

3.输入非整数(小数或分数),工具直接报错

✗ 错误GCD(2.5, 5) 或 LCM(1/2, 3/4)
✓ 修复先将小数或分数化为整数比:2.5:5 = 5:10,GCD(5,10)=5;或使用有理数 GCD 公式

GCD/LCM 定义在整数环上,不直接支持有理数。用户误以为可输入小数,实际需先通分或化为整数再计算。

4.输入超大整数导致 JavaScript 精度丢失

✗ 错误GCD(9007199254740993, 9007199254740995)
✓ 修复使用 BigInt:GCD(9007199254740993n, 9007199254740995n) 或拆分为小因子

JavaScript Number 安全整数上限为 2^53-1(约 9e15),超过此值位运算和取模会失真。工具若基于 JS 实现,大数需用 BigInt 或库处理。

5.误以为 GCD 结果唯一,忽略负数符号

✗ 错误GCD(-8, 12) = 4 或 -4 混用
✓ 修复GCD(-8, 12) = 4(取正)

数论约定 GCD 返回非负值,但部分实现返回带符号结果。用户若手动计算或使用不同语言库,可能得到 -4,导致后续运算符号错误。

6.多参数时顺序写错,以为交换律不成立

✗ 错误先算 LCM(6,10)=30,再算 GCD(30,15)=15,误以为 LCM(6,10,15)=15
✓ 修复LCM(6,10,15) = 30(正确顺序:LCM(LCM(6,10),15) = LCM(30,15)=30)

多参数 GCD/LCM 需迭代计算,但用户常误以为先算前两个再与第三个组合时结果会因顺序不同而变。实际上交换律和结合律均成立,只是计算过程需正确嵌套。

7.误将 LCM 用于分数通分时忘记分母

✗ 错误1/6 + 1/10 = (1+1)/LCM(6,10) = 2/30
✓ 修复1/6 + 1/10 = (10+6)/60 = 16/60 = 4/15

LCM 是通分后的分母,分子需分别乘以 LCM÷原分母。直接加分子会漏掉缩放因子,这是分数加法中典型错误。

第三节

工作原理

How It Works

核心公式

GCD(a, b) = max{ d | d|a 且 d|b },LCM(a, b) = a × b ÷ GCD(a, b)

变量说明

  • a第一个正整数
  • b第二个正整数
  • GCD最大公约数
  • LCM最小公倍数

示例

求 48 和 60 的最大公约数与最小公倍数。先用辗转相除法:60 ÷ 48 = 1 余 12,48 ÷ 12 = 4 余 0,得 GCD = 12。再算 LCM = 48 × 60 ÷ 12 = 2880 ÷ 12 = 240。结果:GCD=12,LCM=240。

输入两个整数辗转相除法(欧几里得算法)计算 GCD(最大公约数)输出 GCD / LCM公式 LCM =a × b ÷ GCD计算 LCM汇总合并
用户输入 本地处理 输出结果
第四节

开发者集成

For Developers

6 种主流语言实现,复制即用:

import math a, b = 12, 18 gcd = math.gcd(a, b) # Python 3.5+ lcm = a * b // gcd print(f"GCD({a},{b}) = {gcd}") # 6 print(f"LCM({a},{b}) = {lcm}") # 36
function gcd(a, b) { while (b) [a, b] = [b, a % b]; return a; } const a = 12, b = 18; const g = gcd(a, b); const l = (a * b) / g; console.log(`GCD(${a},${b}) = ${g}`); // 6 console.log(`LCM(${a},${b}) = ${l}`); // 36
package main import "fmt" func gcd(a, b int) int { for b != 0 { a, b = b, a%b } return a } func main() { a, b := 12, 18 g := gcd(a, b) l := a * b / g fmt.Printf("GCD(%d,%d) = %d\n", a, b, g) // 6 fmt.Printf("LCM(%d,%d) = %d\n", a, b, l) // 36 }
public class GcdLcm { static int gcd(int a, int b) { while (b != 0) { int t = b; b = a % b; a = t; } return a; } public static void main(String[] args) { int a = 12, b = 18; int g = gcd(a, b); int l = a * b / g; System.out.printf("GCD(%d,%d) = %d%n", a, b, g); // 6 System.out.printf("LCM(%d,%d) = %d%n", a, b, l); // 36 } }
fn gcd(a: u64, b: u64) -> u64 { if b == 0 { a } else { gcd(b, a % b) } } fn main() { let (a, b) = (12, 18); let g = gcd(a, b); let l = a * b / g; println!("GCD({},{}) = {}", a, b, g); // 6 println!("LCM({},{}) = {}", a, b, l); // 36 }
#!/bin/bash gcd() { local a=$1 b=$2 while [ $b -ne 0 ]; do local t=$b b=$((a % b)) a=$t done echo $a } a=12 b=18 g=$(gcd $a $b) l=$((a * b / g)) echo "GCD($a,$b) = $g" # 6 echo "LCM($a,$b) = $l" # 36
第五节

常见问题

Q & A
问算三个以上数的最大公约数,这个工具支持吗?+
答

支持。输入框内用英文逗号或空格分隔多个数字即可,不限于两个数。例如输入 12, 18, 24 会算出 6。注意不要混用中文逗号和全角空格,否则解析会出错。计算原理是两两辗转相除,结果与数学定义一致。

问为什么我算 0 和 5 的最大公约数,它显示 5?0 的约数不是没有意义吗?+
答

数学上 0 可以被任何非零整数整除,因此 0 和任意非零整数 a 的最大公约数定义为 |a|。本工具遵循此定义,所以 0 和 5 的结果是 5。如果你输入的是 -5 和 0,结果也会是 5(取绝对值)。如果不需要处理 0,建议只输入正整数。

问负数能算吗?算出来是正还是负?+
答

可以输入负数。最大公约数和最小公倍数的标准定义只对正整数有意义,但本工具对负数做了取绝对值处理。所以输入 -12 和 18,GCD 输出 6(正数),LCM 输出 36(正数)。如果你需要严格按负数符号计算,本工具不适用。

问计算超大数(比如十几位)会不会卡死或精度丢失?+
答

不会。本工具是纯前端 JavaScript 实现,使用 BigInt 类型处理整数,理论支持任意位数(受浏览器内存限制,实际测试过 50 位以内秒出)。如果遇到输入后无响应,通常是浏览器标签页内存溢出,刷新即可。建议不要一次性输入超过 10 个 20 位以上的大数同时计算。

问算出来的结果怎么复制?想粘贴到别处用。+
答

结果区域本身不是输入框,不能直接选中复制?可以直接用鼠标拖选结果文本,右键复制或 Ctrl+C(Mac 用 Cmd+C)。如果觉得拖选不方便,可以点一下结果旁边的复制图标按钮(如果有),或手动再输入一遍。未来版本可能会加一键复制按钮。

问输入 12 和 18,为什么 GCD 是 6 而 LCM 是 36?两个结果有什么关系?+
答

这是数学定理:两个正整数 a 和 b 的乘积等于它们的 GCD 与 LCM 的乘积,即 a × b = GCD(a,b) × LCM(a,b)。验证:12×18=216,6×36=216。本工具同时显示两个结果,方便你直接验证这个关系。如果算三个数,此关系不成立,但工具仍会分别正确计算。

问这个工具是不是要联网?断网了还能用吗?+
答

完全离线可用。本工具所有计算逻辑写在 HTML 页面的 JavaScript 中,不依赖后端接口,也不上传任何数据到服务器。打开一次页面后,即使断网,刷新或重新输入也能正常计算。隐私方面:你的数字不会离开你的设备。

问最小公倍数算出来很大,比如 999999937 和 999999938,怎么结果那么长?+
答

两个互质的数(GCD=1),它们的 LCM 就是两者乘积,所以结果位数接近两者位数之和。999999937 和 999999938 互质,LCM 约 9.9999987e17,显示为 999999874999999906。这是正确的数学结果,不是工具出错。如果你只需要小一点的公倍数,可以尝试用短除法手动做,但本工具只给精确值。

隐私保证所有计算与处理均在你的浏览器本地完成,输入数据不会上传服务器,也不会保存或共享。

↑↓选择 ↵打开 ⌘+↵新窗口 esc关闭