私は現在Project Eulerに取り組んでおり、すべての質問を力ずくで解決しないと、より興味深い (そしてより良い学習体験になる) 可能性があると考えました。質問 3 では、数値の素因数を求められます。私の解決策は、(別の因数分解アルゴリズムを使用して) 数値を因数分解し、因数の素数性をテストすることです。Miller-Rabin Primality テスト用のこのコードを思いつきました (素数テストを徹底的に調査した後)。入力したすべての複合奇数に対して true を返します。誰かが理由を理解するのを手伝ってくれますか? アルゴリズムを正しくコーディングしたと思いました。
public static boolean isPrime(long num)
{
if(num % 2 == 0)
return false;
else
{
double d;
int r=0;
while((num-1) % Math.pow(2,r+1) == 0)
r++;
d = (num-1) % Math.pow(2,r);
int[] a = {2,3,5,7,11,13,17,23,31,62,73,1662803};
boolean primality = true;
for(int k = 0; k < a.length; k++)
{
if((Math.pow(a[k],d)-1) % num != 0)
{
for(int s = 0; s < r-1; s++)
{
if((Math.pow(a[k],Math.pow(2,s)*d)+1) % num != 0)
primality = false;
}
}
}
return primality;
}