特定の数が持つ因子の数を返す関数をJavaで書き込もうとしています。
以下の制限を考慮に入れる必要があります。
- BigIntegerで行う必要があります
- 以前に生成された番号を保存することは許可されていないため、処理が増え、メモリが少なくなります(このように「アトキンのふるい」を使用することはできません) 。
- 負の数は無視できます。
これは私が今まで持っているものですが、それは非常に遅いです。
public static int getNumberOfFactors(BigInteger number) {
// If the number is 1
int numberOfFactors = 1;
if (number.compareTo(BigInteger.ONE) <= 0) {
return numberOfFactors;
}
BigInteger boundry = number.divide(new BigInteger("2"));
BigInteger counter = new BigInteger("2");
while (counter.compareTo(boundry) <= 0) {
if (number.mod(counter).compareTo(BigInteger.ZERO) == 0) {
numberOfFactors++;
}
counter = counter.add(BigInteger.ONE);
}
// For the number it self
numberOfFactors++;
return numberOfFactors;
}