Pour tester si un nombre est premier ou non, pourquoi devons-nous tester s'il n'est divisible que jusqu'à la racine carrée de ce nombre?
algorithm
primes
primality-test
La poêle
la source
la source
n = a*b
eta <= b
alorsa*a <= a*b = n
.floor(sqrt(n))
.Réponses:
Si un nombre
n
n'est pas un nombre premier, il peut être divisé en deux facteursa
etb
:Maintenant
a
etb
ne peut pas être à la fois supérieur à la racine carrée den
, car alors le produita * b
serait supérieur àsqrt(n) * sqrt(n) = n
. Donc, dans toute factorisation den
, au moins un des facteurs doit être inférieur à la racine carrée den
, et si nous ne pouvons trouver aucun facteur inférieur ou égal à la racine carrée,n
doit être un nombre premier.la source
sqrt(n)
-il être suffisamment précis pour que cette propriété soit valable étant donné que nous utilisons des virgules flottantes.i * i <= n
au lieu dei <= sqrt(n)
si vous voulez éviter les subtilités des nombres à virgule flottante.Disons
m = sqrt(n)
alorsm × m = n
. Maintenant, si cen
n'est pas un nombre premier, alorsn
on peut l'écriren = a × b
ainsim × m = a × b
. Notez quem
c'est un nombre réel alors quen
,a
etb
sont des nombres naturels.Maintenant, il peut y avoir 3 cas:
Dans les 3 cas,
min(a, b) ≤ m
. Par conséquent, si nous recherchons jusqu'àm
, nous sommes tenus de trouver au moins un facteur den
, ce qui suffit pour montrer que cen
n'est pas un facteur premier.la source
n is not a prime
, et le prouvons, sinon c'est un premier choix.Parce que si un facteur est supérieur à la racine carrée de n, l'autre facteur qui se multiplierait avec lui pour égaler n est nécessairement inférieur à la racine carrée de n.
la source
Une explication plus intuitive serait: -
La racine carrée de 100 est 10. Disons axb = 100, pour différentes paires de a et b.
Si a == b, alors ils sont égaux et sont exactement la racine carrée de 100. Ce qui est 10.
Si l'un d'eux est inférieur à 10, l'autre doit être supérieur. Par exemple, 5 x 20 == 100. L'un est supérieur à 10, l'autre est inférieur à 10.
En pensant à axb, si l'un d'eux descend, l'autre doit devenir plus gros pour compenser, de sorte que le produit reste à 100. Ils pivotent autour de la racine carrée.
La racine carrée de 101 est d'environ 10,049875621. Donc, si vous testez le nombre 101 pour la primauté, vous n'avez qu'à essayer les entiers jusqu'à 10, y compris 10. Mais 8, 9 et 10 ne sont pas eux-mêmes premiers, vous n'avez donc qu'à tester jusqu'à 7, ce qui est premier.
Parce que s'il y a une paire de facteurs avec l'un des nombres 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 de 1 à 11 (inclus) pour voir s'ils entrent uniformément. 11 va en 11 fois, donc 121 n'est pas premier. Si vous vous étiez arrêté à 10 ans et que vous n'aviez pas testé 11, vous en auriez manqué 11.
Vous devez tester chaque entier premier supérieur à 2, mais inférieur ou égal à la racine carrée, en supposant que vous testez uniquement des nombres impairs.
"
la source
Supposons que ce
n
ne soit pas un nombre premier (supérieur à 1). Il y a donc des chiffresa
etb
tels queEn multipliant la relation
a<=b
para
etb
on obtient:Par conséquent: (notez que
n=ab
)Par conséquent: (Notez que
a
etb
sont positifs)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.
la source
Supposons que l'entier donné
N
ne soit pas premier,Alors N peut être factorisé en deux facteurs
a
etb
,2 <= a, b < N
tels queN = a*b
. De toute évidence, les deux ne peuvent pas être plus grands quesqrt(N)
simultanément.Supposons sans perte de généralité
a
plus petite.Maintenant, si vous ne pouviez pas trouver de diviseur d'
N
appartenance à la gamme[2, sqrt(N)]
, qu'est-ce que cela signifie?Cela signifie qu'il
N
n'a pas de diviseur dans[2, a]
tant quea <= sqrt(N)
.Par conséquent,
a = 1
etb = n
donc par définition,N
est premier ....
Lectures complémentaires si vous n'êtes pas satisfait:
De nombreuses combinaisons différentes de
(a, b)
peuvent être possibles. Disons qu'ils sont:(a 1 , b 1 ), (a 2 , b 2 ), (a 3 , b 3 ), ....., (a k , b k ). Sans perte de généralité, supposons a i <b i ,
1<= i <=k
.Maintenant, pour pouvoir montrer que ce
N
n'est pas premier, il suffit de montrer qu'aucun des i ne peut être factorisé davantage. Et nous savons également que a i <=sqrt(N)
et donc vous devez vérifier jusqu'àsqrt(N)
ce qui couvrira tout a i . Et par conséquent, vous pourrez conclure si oui ou nonN
est premier....
la source
Ce ne sont que des utilisations de base 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 parce que:
sqrroot(n) * sqrroot(n) = n
.Étant donné que, si un nombre entier supérieur
1
et inférieur ou supérieur à sesqrroot(n)
divise également enn
,n
ne peut pas être un nombre premier.Exemple de pseudo-code:
la source
guard
déclaration dans Swift en conjonction avec ce stackoverflow.com/a/25555762/4475605 pratique pour effectuer une sortie anticipée d'un calcul plutôt que de gaspiller de la puissance de calcul. Merci d'avoir posté.++i
devenir le numéro 1, ce qui retournerait toujours faux (parce que 1 se divise en tout). J'ai corrigé la réponse ci-dessus.Donc, pour vérifier si un nombre N est premier ou non. Nous devons seulement vérifier si N est divisible par des nombres <= SQROOT (N). En effet, si nous factorisons N en 2 facteurs, disons X et Y, c'est-à-dire. N = X Y. Chacun de X et Y ne peut pas ê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, nous devons seulement vérifier ces nombres <= SQROOT (N).
la source
Disons que nous avons un nombre "a", qui n'est pas un nombre premier [pas un nombre premier / composé signifie - 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'eux est supérieur à la racine carrée de "a" que la multiplication de "b" & "c" sera supérieure à "a".
Ainsi, "b" ou "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 vérifions uniquement jusqu'à la racine carrée de ce nombre.
la source
Étant donné n'importe quel nombre
n
, alors une façon de trouver ses facteurs est d'obtenir sa racine carréep
:Bien sûr, si on se multiplie
p
par lui-même, on revientn
:Il peut être réécrit comme:
O
p = a = b
.. Sia
augmente, puisb
diminue pour se maintenira*b = n
. C'est doncp
la limite supérieure.Mise à jour: je relis cette réponse encore aujourd'hui et elle est devenue plus claire pour moi. La valeur
p
ne signifie pas nécessairement un entier parce que si c'est le cas, alorsn
ce ne serait pas un nombre premier. Donc,p
pourrait être un nombre réel (c'est-à-dire avec des fractions). Et au lieu de parcourir toute la gamme den
, il ne nous reste plus qu'à parcourir toute la gamme dep
. L'autrep
est une copie miroir, donc nous réduisons la plage de moitié. Et puis, maintenant je vois que nous pouvons réellement continuer à refaire lesquare root
et à le fairep
à plus de la moitié de la plage.la source
Soit n un nombre non premier. Par conséquent, il a au moins deux facteurs entiers supérieurs à 1. Soit f le plus petit de n de tels 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.
la source
Tout nombre composite est un produit de nombres premiers.
Disons
n = p1 * p2
, oùp2 > p1
et ce sont des nombres premiers.Si
n % p1 === 0
alors n est un nombre composite.Si
n % p2 === 0
alors devinez quoin % p1 === 0
aussi!Il n'y a donc aucun moyen que si
n % p2 === 0
maisn % p1 !== 0
en même temps. En d'autres termes, si un nombre composé n peut être divisé également par p2, p3 ... pi (son plus grand facteur), il doit également être divisé par son plus petit facteur p1 . Il s'avère que le facteur le plus basp1 <= Math.square(n)
est toujours vrai.la source
Pour tester la primalité d'un nombre, n , on pourrait s'attendre à une boucle telle que la suivante en premier lieu:
Voici ce que fait la boucle ci-dessus: pour un 1 <i <n donné , 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, alors nous pouvons être sûrs que n n'est pas un nombre premier, auquel point la boucle se termine. Si pour non i, n / i est un entier, alors n est premier.
Comme pour tout algorithme, 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 contrôles entiers 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 i n'atteint jamais n; et si k = n, alors a = 1, mais i commence la forme 2)
De plus, n / k = a, et comme indiqué ci-dessus, a est une valeur de i donc n> a> 1.
Ainsi, a et k sont tous deux des entiers compris entre 1 et n (exclusif). Depuis, i atteint chaque entier de cette plage, à une certaine itération i = a et à une autre itération i = k. Si le test de primalité de n échoue pour min (a, k), il échouera également pour max (a, k). Nous devons donc vérifier un seul de ces deux cas, à moins que min (a, k) = max (a, k) (où deux contrôles se réduisent à un), c'est-à-dire a = k, auquel point a * a = n, qui 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 d'exécuter le test pour i = 2 à sqrt (n).
la source