Je traverse les problèmes sur Project Euler pour enseigner moi-même la programmation Ruby. Je sais qu'il existe une fonction intégrée pour ce faire, mais j'évite les fonctions intégrées pour m'aider à apprendre.Ruby - déterminer si un nombre est un premier
Je dois donc écrire une méthode pour déterminer si un nombre est un nombre premier. La première méthode fonctionne, mais la seconde ne fonctionne pas. Quelqu'un peut-il expliquer pourquoi?
def is_prime n
for d in 2..(n - 1)
if (n % d) == 0
return false
end
end
true
end
def is_prime2 n
foundDivider = false
for d in 2..(n - 1)
foundDivider = ((n % d) == 0) or foundDivider
end
not foundDivider
end
Ce n'est pas une réponse à votre question ... mais pourquoi sont-vous vérifier tous ces chiffres une fois que vous avez trouvé ce n'est pas une prime? Vous avez * déjà * obtenu une réponse définitive à votre question. –
Ouais je l'ai réalisé - mais je le faisais pour être sûr de savoir comment fonctionnent les opérateurs booléens dans Ruby –
Un algorithme plus efficace peut être développé avec l'approche suivante: ne pas itérer sur des nombres pairs (pas seulement les ignorer) et couper la boucle à 5-10% de la taille d'origine. Les détails sont ici: http://stackoverflow.com/questions/26792960/why-doesnt-my-ruby-coding-for-finding-prime-numbers-work/32806718#32806718 – Anatoly