试除法求约数java
时间: 2025-05-15 08:05:20 浏览: 23
试除法是一种用于寻找整数的所有约数的基本算法。它的核心思想是通过从最小的正整数开始逐一尝试所有可能的因数,直到该整数本身为止。
### Java 实现示例
```java
import java.util.ArrayList;
import java.util.List;
public class DivisorFinder {
// 使用试除法求解 n 的所有约数
public static List<Integer> findDivisors(int n) {
if (n <= 0) {
throw new IllegalArgumentException("输入数字需要大于零");
}
List<Integer> divisors = new ArrayList<>();
for (int i = 1; i <= Math.sqrt(n); i++) { // 只需检查到 sqrt(n)
if (n % i == 0) { // 如果可以整除,则i和对应的商都是因子
divisors.add(i);
int correspondingFactor = n / i; // 对应的大于sqrt(n)的因子
if (correspondingFactor != i && correspondingFactor != n) {
divisors.add(correspondingFactor);
}
}
}
return divisors;
}
public static void main(String[] args) {
int number = 28;
System.out.println("Number " + number + "'s divisors are:");
List<Integer> result = findDivisors(number);
for (Integer divisor : result) {
System.out.print(divisor + " ");
}
}
}
```
#### 运行结果解释:
对于`number=28`, 输出应该是 `1 28 2 14 4 7` (注意顺序可能会有所不同)。这是因为我们按照从小到大的原则添加了所有的约数。
---
### 算法优化说明:
为了减少不必要的计算量,在上述实现中仅迭代至 \( \sqrt{n} \),如果找到某个因子\( k \), 那么同时也会得到另一个因子 \( n/k \).
例如,当查找28的约数时,
- 当遍历到2的时候发现其是一个约数,
- 同时也确定14也是一个约数(因为 28 ÷ 2 = 14 ).
这种做法相比直接枚举整个范围显著提高了效率!
阅读全文
相关推荐




















