私は Java でコーディングすることを学び始めました。そして、Project Eulerサイトを使用して、学習した新しいコーディングの各ビットを試して完了するための小さなタスクを与えることにしました。だから私は問題3に出くわしました:
13195 の素因数は 5、7、13、29 です。600851475143 の最大の素因数は?
私はこの問題について考え、素数に関するさまざまな理論と、さまざまな計算 (エラトステネスのふるいがその例です) を介して素数を見つける方法についてさまざまな理論を調査しました。それらが素数だった場合、Tn 変数 (この場合は 600851475143) を新しく発見された素数で割り、それが因数であるかどうかを確認します。そうであれば、それを変数 Hp (最高素数) に割り当て、プログラムの最後に Hp をコンソールに出力して結果を出します。
これが私のコードです:
public class Largest_Prime_Factor_NEW_SOLUTION {
static long Tn = 600851475143L;
static long Hp = 0;
static boolean isPrime = false;
public static void main(String[] args) {
for (long i=2; i<Tn; i++) {
System.out.println("TESTING NUMBER " + i);
for (long k=2; k < i; k++) {
if (i % k == 0) {
System.out.println(i + " IS NOT A PRIME");
break;
} else if (k + 1 == i) {
isPrime = true;
}
}
if (isPrime) {
System.out.println(i + " IS A PRIME");
if (Tn % i == 0) {
System.out.println(Tn + " IS DIVISIBLE BY " + i);
Hp = i;
} else {
System.out.println(Tn + " IS NOT DIVISIBLE BY " + i);
}
}
isPrime = false;
}
System.out.println("THE HIGHEST PRIME NUMBER OF " + Tn + " IS " + Hp);
}
}
今、私はこのコードが非常に非効率的であることを知っており、開始したところからコードを要約することができました (どこにでもループがありました!)。私が研究することはすべて他の人がすることと矛盾していて、非常に混乱しているので、それは私を蝕んでいます. sieve メソッドを試してみましたが、ブール配列は int 配列にしかならず、long 配列にはならないことを理解していますか?
コーディングを始めるときは、使える知識に制限があることは理解していますが、興味があるだけで、最終的な解決策がどうなるかを知りたいと思っています。