Le premier numéro de la fonction dans la R
Je suis en train de créer une fonction pour tester si un nombre entier est un nombre premier, j'ai essayé d'utiliser les éléments suivants:
tpn <- function(prime.num){
if(prime.num==2){
print("PRIME")
} else {
if(prime.num%%(2:(prime.num-1))!=0){
print("PRIME")
} else {
print("NOT PRIME")
}}}
Cela ne fonctionne pas, bien que je ne peux pas comprendre pourquoi. Je suis de la vérification pour voir si le nombre donné est divisible par aucun des entiers jusqu'à ce nombre sans résidus. Si elle ne peut pas, alors le nombre est premier.
Une autre solution que j'ai trouvé était:
tpn <- function(pn){
if(sum(pn/1:pn==pn%/%1:pn)==2)
print("prime")
}
Cela fonctionne. Bien que, je ne peux pas obtenir ma tête autour de ce qui sum(pn/1:pn == pn%/%1:pn) == 2
est en fait à tester.
Avez-vous essayé de le décomposer en morceaux? Si vous ne les avez, vous verriez que
Peut-être un doublon de stackoverflow.com/q/3789968/321622 ou stackoverflow.com/q/3858636/321622
if
n'accepte qu'un seul argument, pour une chose (dans votre premier exemple). Dans la seconde, quelques parenthèses pourrait l'aider, alors allez à la page d'aide ?Syntax
de voir les opérations qui arrive en premier.Peut-être un doublon de stackoverflow.com/q/3789968/321622 ou stackoverflow.com/q/3858636/321622
OriginalL'auteur user2952367 | 2013-11-04
Vous devez vous connecter pour publier un commentaire.
Un certain nombre
a
est divisible par un nombreb
si le résultat de la divisiona /b
est égal au résultat de la division entièrea %/% b
. Tout entierpn
peut être divisé en au moins deux numéros:1
etpn
. Les nombres premiers sont ceux qui ne peuvent être divisés par ces deux. Briser le code:pn /1:pn
sont les résultats des divisions par1
,2
, ...,pn
pn %/% 1:pn
sont le résultat de la division entière par1
,2
, ...,pn
sum(pn /1:pn == pn %/% 1:pn)
sont de ce nombre, combien sont égaux, c'est à dire, le nombre des diviseurs de l'entier depn
. Si ce nombre est2
, vous avez un nombre premier.Ce qui était incorrect avec votre code:
if
besoin de tester si quelque chose estTRUE
ouFALSE
, mais vous avez été en passant un ensemble de vecteur. Aussi, votre logique est erronée. Il doit avoir été:Et une fois que vous avez réglé sur le retour à une logique, vous pouvez rendre votre code beaucoup plus court:
(qui intègre @Carl commentaire à propos de ne pas vérifier tous les nombres.)
2:prime.num-1
est incroyablement gaspillage, vous pouvez vous arrêter à peu prèssqrt(prime.num)
Merci beaucoup, vous avez fait cela très clair! si seulement tu pouvais être mon R conférencier 😀
Donc je sais que c'est tard, mais la version courte est dit que 3 n'est pas premier car
floor(sqrt(n))
dans ce cas est de 1.IMO 1 est un nombre premier. Je n'aime pas ce mathmos dire 🙂
Je vous remercie de votre audace
OriginalL'auteur flodel
J'ai juste essayé la
is.prime
exemple de code. Mais avec ce 3 n'est pas premier ;o)La version améliorée utilise plafond à la place de la parole de l'opération.
Meilleur!
OriginalL'auteur Seily
Vous pouvez également utiliser le
isprime()
fonction dans le matlab paquet. Il fonctionne également avec le vecteur arguments:OriginalL'auteur user2030503
Une expression régulière pour trouver des nombres premiers
http://diswww.mit.edu/bloom-picayune.mit.edu/perl/10138
Ou si vous prenez tous les entiers de 1 à
x
, le nombre de diviser sans reste devrait être de 2: 1 etx
Je savais que la regex serait plus lent, mais c'est une de mes préférées
très vrai. l'indice de référence des timings sont très bizarres. au moins dans le vôtre, ils vont dans le même (mauvais) sens, mais dans la regex de référence dans la réponse, min est inférieure à T1 mais T1 est plus grand que la moyenne, mais seulement légèrement inférieure à la médiane, qui est plus élevé que le quartile supérieur et le maxis le plus bas.. aucune idée de ce qui se passe là
Ouais, je suppose min vs max n'est pas significative avec l'unité = 'relatif', qui, apparemment, convertit chaque colonne de façon indépendante. Dans mon test, il est logique que max doit être super élevé, car il fait beaucoup de travail pour la première itération... mais alors min est très faible car il peut se reposer sur ses lauriers / memoised calculs.
OriginalL'auteur rawr
Je vais vous fournir avec 2 facile fonctions. La seconde affiche n-ième nombre premier. EDIT* (faute de frappe)
OriginalL'auteur MathGainz
Voici une autre méthode pour trouver le premier numéro à l'aide du simple concept
OriginalL'auteur Sugand Anand
C'est le vectorisé version avec naturel-numéro de contrôle:
OriginalL'auteur Yuri
OriginalL'auteur neeraj Guntupalli
Ici est le plus compact de code je pense:
Si vous avez besoin de vérifier si chaque élément d'un vecteur de nombres est un nombre premier, vous pouvez le faire:
Maintenant
is_prime2()
travaille avec des vecteurs.is_prime <- function(n) sum(n %% (1:n) == 0) <= 2
😉OriginalL'auteur SavedByJESUS
Modifier la présente déclaration:
et tout fonctionnera.
OriginalL'auteur Cat Katherine
Premier ou non:
OriginalL'auteur A Chatterjee