わかりましたので、ここで深刻な実行時ヘルプが必要です!
このメソッドは int 値を取り、その素数をチェックしてtrue
、数値が実際に素数であるかどうかを返す必要があります。ループがi
2 乗する必要がある理由を理解しています。最悪のシナリオは、数が素数 (または素数の倍数) の場合であることを理解しています。しかし、実際の実行時間を定量化する方法がわかりません。
数字 ( ) のパターンや相関関係、および発生するループの数を理解するために、自分でループを手動で実行しましたn
が、文字通り、毎回同じトラップに陥り続けているように感じます。これについて新しい考え方が必要です!
ヒントがあります:
「整数のサイズを考える」
これにより、for ループ ( ) で実行される反復回数に関連して、数値内の整数のリテラル数を定量化する必要がありますfloor log(n)) +1
。しかし、それは機能していませんか?! n
明らかに平方根ではないことはわかっています。
Big O表記をお願いしています。
public class PrimeHunter
{
public static boolean isPrime(int n)
{
boolean answer = (n > 1) ? true : false; //runtime = linear runtime
for (int i = 2; i * i <= n; i++) //runtime = ?????
{
if (n % i == 0) //doesn't occur if it is a prime
{
answer = false;
break;
}
}
return answer; //runtime = linear runtime
}
}