web-dev-qa-db-fra.com

Pourquoi vérifions-nous jusqu'à la racine carrée d'un nombre premier pour déterminer s'il est premier?

Pour vérifier si un nombre est premier ou non, pourquoi devons-nous vérifier s'il n'est divisible que jusqu'à la racine carrée de ce nombre?

303
Pan

Si un nombre n n'est pas un nombre premier, il peut être décomposé en deux facteurs a et b:

n = a * b

Si a et b étaient tous deux supérieurs à la racine carrée de n, alors a * b serait supérieur à n. Donc, au moins un de ces facteurs doit être inférieur ou égal à la racine carrée de n et si nous ne pouvons trouver aucun facteur inférieur ou égal à la racine carrée, n doit être premier.

509
Sven Marnach

Disons m = sqrt(n) puis m × m = n. Maintenant, si n n'est pas un nombre premier, alors n peut être écrit sous la forme n = a × b, donc m × m = a × b. Notez que m est un nombre réel alors que n, a et b sont des nombres naturels.

Maintenant, il peut y avoir 3 cas:

  1. a> m ⇒ b <m
  2. a = m ⇒ b = m
  3. a <m ⇒ b> m

Dans tous les 3 cas, min(a, b) ≤ m. Si nous cherchons jusqu'à m, nous trouverons au moins un facteur n, ce qui suffit à montrer que n n'est pas premier.

298
BiGYaN

Parce que si un facteur est supérieur à la racine carrée de n, l’autre facteur qui se multiplierait avec lui pour qu’il soit égal à n est nécessairement inférieur à la racine carrée de n.

51
patros

Une explication plus intuitive serait: -

La racine carrée de 100 est 10. Disons a x b = 100, pour différentes paires de a et b.

Si a == b, ils sont égaux et correspondent exactement à la racine carrée de 100. Qui est 10.

Si l'un d'entre eux est inférieur à 10, l'autre doit être plus grand. Par exemple, 5 x 20 == 100. L’un est supérieur à 10, l’autre est inférieur à 10.

En pensant à un x b, si l'un d'eux tombe en panne, l'autre doit grossir pour compenser, de sorte que le produit reste à 100. Ils pivotent autour de la racine carrée.

La racine carrée de 101 est environ 10,049875621. Donc, si vous testez la primalité du nombre 101, il vous suffit d'essayer les nombres entiers jusqu'à 10, y compris 10. Mais 8, 9 et 10 ne sont pas eux-mêmes premiers, vous devez donc tester jusqu'à 7, qui est premier.

Parce que s'il y a une paire de facteurs dont l'un des nombres est supérieur à 10, l'autre de la paire doit être inférieur à 10. Si le plus petit n'existe pas, il n'y a pas de facteur plus grand correspondant de 101.

Si vous testez 121, la racine carrée est 11. Vous devez tester les entiers premiers compris entre 1 et 11 (inclus) pour voir s'il est égal. 11 va dans 11 fois, donc 121 n'est pas premier. Si vous aviez arrêté à 10h et que vous n’aviez pas testé 11h, vous auriez manqué 11h.

Vous devez tester chaque nombre premier supérieur à 2, mais inférieur ou égal à la racine carrée, en supposant que vous ne testez que des nombres impairs.

`

25
Archit Garg

Supposons que n ne soit pas un nombre premier (supérieur à 1). Donc, il y a des nombres a et b tels que

n = ab      (1 < a <= b < n)

En multipliant la relation a<=b par a et b, on obtient:

a^2 <= ab
 ab <= b^2

Par conséquent: (notez que n=ab)

a^2 <= n <= b^2

Donc: (notez que a et b sont positifs)

a <= sqrt(n) <= b

Donc, si un nombre (supérieur à 1) n'est pas premier et que nous testons la divisibilité jusqu'à la racine carrée du nombre, nous trouverons l'un des facteurs.

17
LoMaPh

Supposons que le nombre entier donné N ne soit pas premier,

Alors N peut être décomposé en deux facteurs a et b, 2 <= a, b < N tels que N = a*b. Il est clair que les deux ne peuvent pas être supérieurs à sqrt(N) simultanément. 

Supposons sans perte de généralité que a est plus petit.

Maintenant, si vous ne trouvez aucun diviseur de N appartenant à la gamme [2, sqrt(N)], qu'est-ce que cela signifie?

Cela signifie que N n'a pas de diviseur dans [2, a] en tant que a <= sqrt(N)

Par conséquent, a = 1 et b = n et donc Par définition, N est premier .

...

Lectures supplémentaires si vous n'êtes pas satisfait:

Plusieurs combinaisons de (a, b) peuvent être possibles. Disons qu'ils sont:

(une1b1), (une2b2), (une3b3), ..... , (unekbk). Sans perte de généralité, supposons unje <bje, 1<= i <=k.

Maintenant, pour pouvoir montrer que N n’est pas premier, il suffit de montrer qu’aucun desje peut être factorisé plus loin. Et nous savons aussi qu’unje <= sqrt(N) et vous devez donc vérifier jusqu’à sqrt(N) qui couvrira tous lesje. Et par conséquent, vous pourrez déterminer si N est premier.

...

6
user8038009

Ce ne sont que des utilisations basiques de la factorisation et des racines carrées.

Cela peut sembler abstrait, mais en réalité cela tient simplement au fait que la factorielle maximale possible d'un nombre non premier devrait être sa racine carrée, car:

sqrroot(n) * sqrroot(n) = n.

Étant donné que, si un nombre entier supérieur à1et inférieur ou égal àsqrroot(n)est divisé également enn, alorsnne peut pas être un nombre premier.

Exemple de pseudo-code:

i = 2;

is_prime = true;

while loop (i <= sqrroot(n))
{
  if (n % i == 0)
  {
    is_prime = false;
    exit while;
  }
  ++i;
}
6
Super Cat

Donc, pour vérifier si un nombre N est premier ou non ..__, il suffit de vérifier si N est divisible par un nombre <= SQROOT (N). En effet, si nous factorisons N en 2 facteurs quelconques, disons X et Y, c'est-à-dire. N = X Y. Chacun de X et Y ne peut être inférieur à SQROOT (N) car alors, X Y <N Chacun de X et Y ne peut pas être supérieur à SQROOT (N) car alors , X * Y> N 

Par conséquent, un facteur doit être inférieur ou égal à SQROOT (N) (tandis que l'autre facteur est supérieur ou égal à SQROOT (N)). Donc, pour vérifier si N est premier, il suffit de vérifier les nombres <= SQROOT (N).

4
rhea rodrigues

Supposons que nous avons un nombre "a", ce qui n'est pas un nombre premier [et non un nombre premier/composé - un nombre qui peut être divisé également par des nombres autres que 1 ou lui-même. Par exemple, 6 peut être divisé également par 2, ou par 3, ainsi que par 1 ou 6]. 

6 = 1 × 6 ou 6 = 2 × 3

Alors maintenant, si "a" n'est pas premier, il peut être divisé par deux autres nombres et disons que ces nombres sont "b" et "c". Ce qui signifie 

a = b * c.

Maintenant, si "b" ou "c", l'un d'entre eux est supérieur à la racine carrée de "a" que la multiplication de "b" & "c" sera supérieure à "a". 

Donc, "b" & "c" est toujours <= racine carrée de "a" pour prouver l’équation "a = b * c".

Pour la raison ci-dessus, lorsque nous testons si un nombre est premier ou non, nous ne vérifions que jusqu'à la racine carrée de ce nombre.

2
Abu Naser Md Shoaib

Soit n non-prime. Par conséquent, il a au moins deux facteurs entiers supérieurs à 1. Soit f le plus petit des n facteurs. Supposons que f> sqrt n. Alors n/f est un entier LTE sqrt n, donc plus petit que f. Par conséquent, f ne peut pas être le plus petit facteur de n. Reductio ad absurdum; Le plus petit facteur de n doit être LTE sqrt n.

1
Reb.Cabin

N'importe quel nombre n, une façon de trouver ses facteurs consiste à obtenir sa racine carrée p:

sqrt(n) = p

Bien sûr, si nous multiplions p par lui-même, nous récupérons alors n:

p*p = n

Il peut être réécrit comme:

a*b = n

p = a = b. Si a augmente, alors b diminue pour maintenir a*b = n. Par conséquent, p est la limite supérieure.

1
typelogic

Pour tester la primalité d'un nombre, n, on pourrait s'attendre à une boucle telle que celle qui suit: 

bool isPrime = true;
for(int i = 2; i < n; i++){
    if(n%i == 0){
        isPrime = false;
        break;
    }
}

Voici ce que fait la boucle ci-dessus: pour un 1 <i <n, elle vérifie si n/i est un entier (laisse le reste 0). S'il existe un i pour lequel n/i est un entier, nous pouvons être sûrs que n n'est pas un nombre premier, point auquel la boucle se termine. Si pour i, n/i est un entier, alors n est premier. 

Comme avec tous les algorithmes, nous demandons: Pouvons-nous faire mieux?

Voyons ce qui se passe dans la boucle ci-dessus. 

La séquence de i va: i = 2, 3, 4, ..., n-1

Et la séquence de vérifications entières va: j = n/i, qui est n/2, n/3, n/4, ..., n/(n-1) 

Si pour certains i = a, n/a est un entier, alors n/a = k (entier)

ou n = ak, clairement n> k> 1 (si k = 1, alors a = n, mais je n'atteint jamais n; et si k = n, alors a = 1, mais i commence à la forme 2)

En outre, n/k = a et, comme indiqué ci-dessus, a est une valeur de i so n> a> 1. 

Donc, a et k sont tous deux des entiers compris entre 1 et n (exclusif). Puisque, i atteint chaque entier de cet intervalle, à une itération i = a et à une autre itération i = k. Si le test de primalité de n échoue pendant min (a, k), il échouera également pour max (a, k). Nous devons donc ne contrôler qu’un de ces deux cas, à moins que min (a, k) = max (a, k) (où deux contrôles sont réduits à un), c’est-à-dire a = k, point auquel a * a = n, lequel implique a = sqrt (n).

En d’autres termes, si le test de primalité de n échouait pour certains i> = sqrt (n) (c.-à-d. Max (a, k)), il échouerait également pour certains i <= n (c.-à-d. Min (a , k)). Donc, il suffirait de lancer le test pour i = 2 à sqrt (n).

0
Aroonalok

Tout nombre composé est un produit de nombres premiers.

Disons n = p1 * p2, où p2 > p1 et ils sont des nombres premiers.

Si n % p1 === 0, alors n est un nombre composé.

Si n % p2 === 0, alors devinez quoi avec n % p1 === 0 également!

Il n’ya donc aucun moyen que si n % p2 === 0 mais n % p1 !== 0 en même temps . En d’autres termes, si un nombre composé n peut être divisé également par p2, p3 ... pi (son facteur le plus élevé) il doit être divisé par son facteur le plus faible p1 aussi . Il s'avère que le facteur le plus faible p1 <= Math.square(n) est toujours vrai.

0
daGo