java中biginteger.gcd()使用二进制gcd算法,返回非负新对象;参数b不可为null,a为零时结果为b.abs(),全零时返回zero;支持负数自动取绝对值,内部用位运算优化,不依赖取模。

基本用法
调用方式很简单,语法是:a.gcd(b),其中 a 和 b 都是 `BigInteger` 类型:
- 参数 b 不能为
null,否则抛出 `NullPointerException` -
a 可以为零(`BigInteger.ZERO`),此时结果等于
b.abs() - 若 a 和 b 都为零,结果为 `BigInteger.ZERO`(数学上 GCD(0,0) 无定义,但 Java 规定返回 0)
常见写法示例
比如求 1071 和 462 的最大公约数:
BigInteger a = new BigInteger("1071");
BigInteger b = new BigInteger("462");
BigInteger result = a.gcd(b); // 返回 21
再比如含负数的情况:
在 Java 中初始化和管理阿里云 SDK客户端。包括单例模式、线程安全、endpoint 与 region 配置、VPC 终端节点、同步与异步等。
BigInteger a = new BigInteger("-1071");
BigInteger b = new BigInteger("462");
BigInteger result = a.gcd(b); // 仍返回 21(自动取绝对值计算)
和 int/long 的 GCD 对比
普通整数通常手写欧几里得递归或迭代:
int gcd(int a, int b) {
return b == 0 ? Math.abs(a) : gcd(b, a % b);
}
而 `BigInteger.gcd()` 内部不用 `%`(开销大),改用位运算(如 `a.isEven()`, `a.shiftRight(1)` 等),更适合任意精度大数,且已充分优化、线程安全、无需手动处理符号。
实用注意事项
- 如果输入来自字符串,确保格式合法(如不能含空格或非法字符),否则构造 `BigInteger` 时抛 `NumberFormatException`
- 多个数求 GCD?需链式调用,例如
a.gcd(b).gcd(c).gcd(d) - 结果永远是不可变的 `BigInteger`,可直接用于后续计算或比较
Java免费学习笔记:立即使用
解锁 Java 大师之旅:从入门到精通的终极指南










