Une formule pour trouver les nombres premiers dans une boucle
J'ai besoin de trouver des nombres premiers avec des boucles for ou while
J'ai écrit cela, mais c'est faux
<?php
$i = 1;
while($i<5)
{
for($j=1; $j<=$i; $j++)
{
if ($j != 1 && $j != $i)
{
echo $i . "/" . $j . "=" . $i%$j . "<br />";
if ($i%$j != 0)
{
echo $i . "<br />";
}
}
}
echo "<br />";
$i += 1;
}
?>
Est-il un moyen de diviser un nombre par un tableau pour trouver les autres?
OriginalL'auteur Mohammad Masoudian | 2013-05-26
Vous devez vous connecter pour publier un commentaire.
Voici une petite fonction que j'ai trouvé: (http://icdif.com/computing/2011/09/15/check-number-prime-number/) Semblait fonctionner pour moi!
...
$sqrt = ceil(sqrt($num));
... si on calcule la racine carrée à l'extérieur de la boucle for, il permettra d'accélérer les choses par ~400%, en particulier lors de la vérification de beaucoup de grands nombresSalut @Farkie, avez-vous essayer?
neun@mono:~$ php test.php float(7.9089679718018) neun@mono:~$ php test2.php float(2.5886662006378)
`Peut aussi être écrit comme:
for($i = 3; $i <= $ceil; $i += 2) {
Est-il judicieux de vérifier /9 lorsque le nombre n'a pas d' /3 ? Je veux dire, il n'y a aucun sens à
$num % $i
où $i n'est pas premier.OriginalL'auteur Farkie
Vous pouvez utiliser cette fonction PHP
gmp_nextprime()
Vous avez besoin de la GNU Multiple Precision(BPF) Mathématiques Extension à être installé
Dans mes tests, c'est un peu lent, trop - ne pas s'attendre à ce que. :/ Obtenir les nombres premiers jusqu'à 100, de 10 000 fois, a pris près de 2 sous PHP 5.6. Les bonnes réponses ici avec des boucles de réaliser que dans 200 - 400 ms.
OriginalL'auteur happy
Ce une base de mise en œuvre :
Ce sera de sortie
Complète de la Logique, étape par étape, et l'analogie visuelle ici : Ici
OriginalL'auteur ngakak
Ici est un one-liner, j'ai trouvé un tout à l'arrière pour vérifier les nombres premiers. Il utilise des coches (unaire) des mathématiques pour déterminer:
Vérifier tous les numéros de façon séquentielle pour les nombres premiers:
De ne vérifier qu'une série de chiffres pour les nombres premiers, comme dans l'exemple fourni:
C'est génial pour une fois les vérifications. Mais cette fonction est beaucoup plus lent que prévu des solutions de rechange à l'aide de boucles.
OriginalL'auteur Jeff Clayton
Sans fonction mathématique:
OriginalL'auteur ghaliano
Tout ce qui est sqrt() est faux ou de toute valeur float est le premier nombre
sqrt()
est un float, mais lui-même n'est pas un nombre premier. il devrait être; sqrt() d'un nombre premier est toujours un flotteur, que vous pouvez utiliser pour accélérer le processus de décider si la boucle à travers un grand nombre de numéros.Cela est vrai dans l'exemple d'un même nombre, mais la fonction ne prend pas en considération ceux qui sont dans ce cas. Vous avez raison, bien que tous les nombres considérés, cette déclaration n'est pas se tenir debout sur ses propres.
OriginalL'auteur Nikba
Je sais que c'est trop tard, mais j'ai trouvé que cette solution est plus élégante.
Merci, Thomas!
Comme une question de faits à l'aide de $i <= $num / 3; pourrait accélérer les choses, surtout pour un grand nombre, mais ne sera jamais rivaliser contre gmp_nextprime() qui m'a fourni 664579 nombres premiers en 39 secondes 🙂
OriginalL'auteur Nik Latkin
C'est, je crois, est assez efficace routine, qui répertorie tous les nombres premiers inférieurs à 1000.
Il teste chaque nombre ($x) afin de voir si elle a des facteurs (autres que de lui-même et 1, bien sûr).
Mathématiquement il n'est pas nécessaire de tester tous les nombres inférieurs comme facteurs possibles, que le premier cycle de nombres premiers inférieurs à la racine carrée de x$. Cette option est activée par le stockage de nombres premiers, puisqu'ils se trouvent dans un tableau (qui je pense est la stratégie de l'OP faisait allusion à l').
Dès que le premier facteur est trouvé, nous savons que $x n'est pas premier, et si aucun autre test de la valeur de $x est nécessaire et nous pouvons sortir de la boucle foreach.
OriginalL'auteur WebSmithery
Sieve_of_Eratosthenes est simple et la plus rapide de l'algorithme pour trouver les nombres premiers.
getPrimes(25)
renvoie 25 comme un nombre premier, même pourgetPrimes(49)
et 49. Ne se produit que lorsque le point d'arrivée est un nombre carré si et pas pour tous.Nice, l'un des plus rapides réponses ici! 🙂
OriginalL'auteur mocak
http://www.primenumbergenerator.com/
OriginalL'auteur
je sais que c'est bientôt la nature de la fin, mais j'espère que ça aide quelqu'un.
//exemple
prime_number_finder(200);
prime_number_finder(200) est juste un exemple de comment la fonction des œuvres, l'exemple obtient les 200 premiers nombres premiers de nombres naturels.
Voulez-vous dire que vous essayez de l'appeler?
ouais...pour appeler la fonction
Ok, tu devrait en faire plus clair la prochaine fois. Bienvenue DONC!
OriginalL'auteur lukkystunt
OriginalL'auteur Ashish
Trouver les nombres premiers entre 1 et 10000, à l'aide d'une fermeture en array_filter():
Edit: 1 n'est pas un nombre premier
Tout simplement à partir de 2 au lieu de 1, merci de me les signaler!
Fonctionne, mais assez lent comparé à d'autres réponses..
OriginalL'auteur user3396065
La meilleure façon de vérifier si un nombre est premier est de voir si elle est divisible par aucun nombre premier avant. Pi(x) est celui que je continue à voir partout... Vous pouvez voir un peu plus d'informations sur le Premier compte sur wikipedia.
Donc le moyen le plus efficace je pense, à l'heure actuelle est comme suit:
Qui n'est pas très efficace, bien, pas quand il s'agit de la construction de la liste des nombres premiers... j'ai travaillé sur une meilleure façon de construire la liste ici, mais il serait tout aussi facile et beaucoup plus efficace de trouver une liste en ligne et l'utiliser.
L'utilisation de la ci-dessus pourrait être le long des lignes de:
OriginalL'auteur Alexander Holman
Je sais que cela vient un peu tard, mais voici un programme simple pour vous aider à faire exactement ce que vous demandez...
OriginalL'auteur Chigozie Orunta
OriginalL'auteur Ajaz Alam
Enchanced version de @Farkie réponse faite spécialement pour la vérification des nombres premiers dans les boucles.
De référence avec phpfiddle.org. V1 - Farkie réponse, V2 Enchanced version
OriginalL'auteur iXCray
Voici un autre très simple mais calme approche efficace:
OriginalL'auteur Rmy5
OriginalL'auteur Rishi