J'ai le code suivant où eratosthenes(N)
retourne un tableau de nombres premiers de 1 à N. Ce que je veux faire est de supprimer les nombres de cette liste qui contiennent les chiffres 0, 2 , 4, 5, 6, 8. Mon code semble assez inefficace et mauvais car il faut environ 20 secondes (eratosthenes(N)
est instantané) pour arriver à seulement 100 000 et ne supprime pas tous les numéros que je le veux. Existe-t-il une meilleure solution évolutive à ce problème?Efficacité de la recherche d'une grande liste de nombres pour certains chiffres
N = 1_000_000
primes = eratosthenes(N)
primes.each do |num|
if ["0", "2", "4", "5", "6", "8"].any? { |digit| num.to_s.include?(digit) }
primes.delete(num)
end
end
"qui contiennent les chiffres 0, 2, 4, 5, 6, 8" - Je suis sûr que ce aw approche rong pour tamis Eratosthenes efficace. Vous voulez ignorer les chiffres dont le dernier chiffre est l'un de ceux-ci, n'est-ce pas? –
De même, ne mutez pas le tableau que vous êtes en train d'itérer. Cela devrait expliquer le "ne supprime pas tous les nombres que je le veux" –
Mes raisons pour supprimer 0, 2, 4, 5, 6, 8 sont séparées de ma recherche initiale de nombres premiers. J'ai déjà mon tableau de primes et je veux réformer davantage. Le deuxième point est dûment noté. –