J'essaie de résoudre Projet Problème d'Euler #35
Le nombre 197 est appelé nombre premier circulaire parce que toutes les rotations des chiffres le composent : 197, 971 et 719, sont elles-mêmes premières.
Combien y a-t-il de nombres premiers circulaires inférieurs à un million ?
Voici ma solution :
import numpy as np
def problem(n=100):
circulars = np.array([], np.int32)
p = np.array(sieveOfAtkin(n), np.int32)
for prime in p:
prime_str = str(prime)
is_circular = True
for i in xrange(len(prime_str)):
m = int(prime_str[i:]+prime_str[:i])
if not m in p:
is_circular = False
if is_circular:
circulars = np.append(circulars, [prime])
return len(circulars)
Malheureusement, la boucle for est très lente ! Une idée sur la façon d'accélérer le processus ? Je pense que la concaténation de la chaîne est le goulot d'étranglement, mais je n'en suis pas tout à fait sûr ! :)
Des idées ? :)