Sto leggendo un foglio di revisione per una classe e l'istruttore ha detto questo all'operatore modulo:
Ricorda che il modulo (%) ha un runtime di O ((logn) ^ 2).
Ha continuato a visualizzare questo codice:
// Presuppone n > 1
public boolean isPrime2 (int n) {
int sqrtN = (int) Math. sqrt (n) ;
for(int i = 2; i < sqrtN + 1; i++) {
if (n % i == 0) return false;
}
return true;
}
Ha detto di questo codice:
O (n) = sqrt (n) x n ^ 2. Come puoi vedere, questo metodo per verificare se un numero è primo, itera da 2 a sqrt (n). Poiché eseguiamo il ciclo su un'operazione quadratica di sqrt (n) volte, il runtime è O (sqrt (n)).
Due cose che non capisco. Uno, perché l'interno del ciclo for ora è un'operazione n ^ 2 piuttosto che un'operazione (logn) ^ 2. Due, anche se è solo un'operazione n ^ 2, il tempo di esecuzione totale non dovrebbe essere O (n)?