好的,所以我需要一些严肃的运行时帮助!
这个方法应该接受一个 int 值,检查它的素数,true
如果这个数字确实是素数,则返回。我理解为什么循环只需要i
平方,我知道最坏的情况是数字是素数(或素数的倍数)的情况。但我不明白如何量化实际运行时间。
我自己手动完成了循环,试图了解数字 ( n
) 的模式或相关性以及发生了多少循环,但我真的觉得我每次都落入同一个陷阱。我需要一种新的思考方式!
我有一个提示:
“想想整数的大小”
这让我想量化一个数字中整数的字面数量,与它在 for 循环 ( floor log(n)) +1
) 中的迭代次数有关。但它不工作?!我知道这显然不是平方根n
。
我要求大 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
}
}