web-dev-qa-db-fra.com

Quelle est la complexité temporelle de l'algorithme de vérifier si un nombre est prime?

Quelle est la complexité temporelle de l'algorithme de vérifier si un nombre est prime?

C'est l'algorithme:

bool isPrime (int number) { 
    if (number < 2) return false;
    if (number == 2) return true;
    if (number % 2 == 0) return false;
    for (int i=3; (i*i) <= number; i+=2) {
        if (number % i == 0 ) return false;
    }
    return true;
}
7

O (sqrt (n)) dans l'ampleur du nombre, mais aussi longtemps que vous utilisez int

Notez que les complexités des algorithmes liés au numéro de choix sont souvent discutées avec n comme la longueur (dans les bits) du nombre - et que vous ne pouvez pas assumer des choses comme la comparaison , Ajout, module ou multiplication à être O (1), car avec des numéros d'arbitrari de précision, ces opérations deviennent plus chères avec la taille du nombre.

Le meilleur algorithme actuellement conn fonctionne dans O ((log n) ^ 6)

18

Le pire des cas - lorsque le nombre est élevé - est assez évident O(sqrt(n)) Le meilleur cas se produit lorsque le nombre peut être divisé par 2,3,5,7,9. Dans ces cas Nous terminerons la boucle jolie bientôt en nombre fini d'étapes - O (1)

Permet maintenant de calculer une affaire moyenne complète pour l'algo:

Sur l'intervalle [0, N], il y a des nombres premiers APROX N/LN (N).

L'algo frappe prime avec une probabilité de p1 = 1/ln (n)

Les autres numéros avec probabilité de p2 = 1-ln (n)

L'affaire moyenne est O (sqrt (n)) * 1/ln (n) + o (1) * (1-ln (n)) Nous nous débarrassons de la partie inférieure

=O(sqrt(n))/ln(n)

déplacer ln (n) à l'intérieur de O ()

=O(sqrt(n)/ln(n))

la base du logarithme n'a pas d'importance pour la notation Big-O

= O(sqrt(n)/log(n))
2
Katkov

L'heure d'exécution maximale de cet algorithme est O (sqrt (n)), qui sera obtenue si n est amorifique ou le produit de deux grands nombres premiers.

Le temps d'exécution moyen est délicat; Je dirais quelque chose comme O (sqrt (n)/journal n), car il n'y a pas beaucoup de chiffres avec seulement de gros facteurs premiers.

0
gnasher729