每个合数都可以写成几个质数相乘的形式。其中每个质数都是这个合数的因数,叫做这个合数的分解质因数。 分解质因数只针对合数。
这次去面试,碰到了这个题。当时写了大致思路,现在完善一下。主要采用递归求解。
public class CutUpPrime {
public static void main(String[] args) {
new CutUpPrime().compute(454789579545L);
}
//因式分解
public void compute(long n) {
int i = 2;
int j = (int) Math.sqrt(n);
for (; i <= j; i++) {
if ((n % i) == 0) {
compute(i);
compute(n / i);
break;
}
}
if (i > j) {
System.out.println(n + " " + isFactor(n));
}
}
//判断是否为质数
public boolean isFactor(long n) {
int j = (int) Math.sqrt(n);
for (int i = 2; i <= j; i++) {
if (n % i == 0)
return false;
}
return true;
}
}
还可改进的地方:1. 不具备记忆功能,可能会重复分解已分解的数
2. 当数本身是质数时,时间与判断它是否为质数的时间持平
3.可以维护一张素数表,在for循环判断是否能整除使用,能极大提高效率。