SQL Premier numéro de la fonction
Si j'ai un nombre X et que vous voulez dire IsPrime(X) = true/false
à l'aide de sql-server quelle est la meilleure approche?
Dois-je simplement importer une table de nombres premiers ou est-il un algorithme qui est assez efficace pour les plus petits nombres premiers?
Note: je ne suis pas intéressé par les nombres supérieurs à approx. 10 millions de dollars.
Terminé vers le haut en utilisant les suivantes:
CREATE FUNCTION [dbo].[isPrime]
(
@number INT
)
RETURNS VARCHAR(10)
BEGIN
DECLARE @retVal VARCHAR(10) = 'TRUE';
DECLARE @x INT = 1;
DECLARE @y INT = 0;
WHILE (@x <= @number )
BEGIN
IF (( @number % @x) = 0 )
BEGIN
SET @y = @y + 1;
END
IF (@y > 2 )
BEGIN
SET @retVal = 'FALSE'
BREAK
END
SET @x = @x + 1
END
RETURN @retVal
END
Allez voir le lien ci-dessous si ça vous aide: social.msdn.microsoft.com/Forums/en-US/transactsql/thread/...
Rien ne sera plus rapide que la copie de nombres à partir de ce site dans un tableau. Surtout depuis que vous avez une limite, par conséquent, vous n'avez pas à calculer à chaque fois: bigprimes.net/archive/prime/1 Ne vous méprenez pas, le calcul des nombres Premiers est bon'ol geek plaisir, mais de façon réaliste, un oeil est plus rapide et que SQL Server est conçu pour faire.
mathsisfun.com/numbers/prime-number-lists.html
Rien ne sera plus rapide que la copie de nombres à partir de ce site dans un tableau. Surtout depuis que vous avez une limite, par conséquent, vous n'avez pas à calculer à chaque fois: bigprimes.net/archive/prime/1 Ne vous méprenez pas, le calcul des nombres Premiers est bon'ol geek plaisir, mais de façon réaliste, un oeil est plus rapide et que SQL Server est conçu pour faire.
mathsisfun.com/numbers/prime-number-lists.html
OriginalL'auteur whytheq | 2013-03-22
Vous devez vous connecter pour publier un commentaire.
Vous pouvez, comme vous l'avez dit, avoir une table qui magasins de tous les nombres premiers inférieurs à 10 millions de dollars. Ensuite, il serait trivial de rechercher si un nombre est premier ou non. La question qui se pose alors est la méthode qui serait plus rapide. Je soupçonne que le tableau serait beaucoup plus rapide (je n'ai pas testé cette affirmation).
Premier Tableau De La Solution
https://www.simple-talk.com/sql/t-sql-programming/celkos-summer-sql-stumpers-prime-numbers/
Fournit quelques solutions et il y a plus dans les commentaires.
https://sqlserverfast.com/blog/hugo/2006/09/the-prime-number-challenge-great-waste-of-time/
Même ici. Quelques solutions.
De la Fonction SQL Solutions
Solution 0
Voici une solution via Trouver des nombres premiers avec une fonction Transact-SQL:
Solution 1
Voici une autre solution via comment savoir si est un nombre premier ou non premier avec une instruction select? Il n'y a plus d'informations dans d'autres commentaires.
dans
Solution 1
n'avez-vous pas besoin d'incrémenter la variable de contrôle de boucle? À l'intérieur de laWHILE
boucle ?oui, c'est correct. Je n'ai pas testé toutes les solutions. Je viens de mettre à jour le code. Mes quelques tests permettent de confirmer qu'il fonctionne correctement.
un jour sur cette? Avez-vous travailler?
[pas eu l'occasion de les tester sur le wknd - cette semaine quelques fois]
OriginalL'auteur JSuar
Je crois que cela n'a pas eu lieu à beaucoup de personnes, mais tous vous avez besoin à faire est de vérifier si chaque nouveau nombre est divisible par de précédentes nombres premiers...
-- ci-dessus, en ajoutant ET en prime < @compteur /2 etc permettra de réduire la vérification des frais généraux supplémentaires.
Paresseux de codage, mais même une lente virtual pc comme l'un à côté de moi vous aurez tout jusqu'à un million de dollars en quelques minutes. Je le fais 78,498 d'entre eux (si vous ne comptez pas 1) sauf si j'ai oublié quelque chose.
OriginalL'auteur Simon UK
Il utilise l'arithmétique modulaire pour vérifier la divisibilité. Le module sera de retour 0 que si un nombre est complètement divisible par le compteur.
Désolé - downvoted, puis re-lire le code et de rendu compte que j'avais mal lu quelque chose 😛
OriginalL'auteur
Il est un moyen intéressant pour générer des nombres premiers, sans aucune fonction ou un processus itératif (
while
) basé sur la génération de séquences. Fondamentalement, un2 .. @max
séquence est générée et nous récupérer tous les numéros qui n'ont pas d'autres dans la séquence quecurrent%other = 0
:Le principal inconvénient de cette solution est la performance (par exemple, il a fallu environ 17 pour générer tous les nombres premiers jusqu'à 20000).
OriginalL'auteur Alexei
Voici un script simple qui fonctionne très bien. Ajuster @num:
OriginalL'auteur Daniel Marcus
OriginalL'auteur user7831030