私のクラスでは、非常に大きな数までの任意の数の素因数分解を計算する「因数分解」アプリケーションを作成する問題が割り当てられました。彼はNumber.java
、その数が素数かどうかを計算するクラスを私たちに与えてくれました。
// Number.java
public class Number {
long n;
public Number(long number) {
n = number;
}
boolean isPrime() {
for(long k = 2; k < n; k++) {
if(n % k == 0) return false;
}
return true;
}
}
これに関する唯一の問題は、Number.java
クラスにコンストラクターがあることです。これにより、この状況では「モバイル」が少なくなります。つまり、引数の素因数を計算するループで、新しい Number オブジェクトが何度も作成されているということです。ループの繰り返しごとにprivate Number isPrimeFactor = new Number()
新しい a を作成するよりも、上部にa を定義する方が理にかなっているのではないでしょうか? Number isPrimeFactor = new Number(i)
このことを先生に尋ねたのですが、あまり答えてくれません。これが私が話していることのいくつかのサンプルコードです。
while (remainder!=0 && j<n) {
Number isFactor = new Number(j);
if(isFactor.isPrime() && remainder%j==0) {
remainder = remainder / j;
factor[i]=j;
temp = (int) j;
multiplicity[temp] = multiplicity[temp]+1;
i++;
} else {
j++;
}
}