Salut,
J'ai du mal à tout saisir dans ton algo.... Faudrait peut-être donner des noms de variables plus explicites... 
Ta variable a par exemple... Bah même si elle est utile, elle a pas trop de sens. 
Donc première simplification algorithmique que je proposerais :
Remplacer ta boucle principale :
while n < 1000:
for i in range(2,n):
if n % i != 0:
a+=1
else:
break
if a == n-2:
p.append(n)
a=0
n+=2
Par :
for n in range(1000):
for i in range(2,n):
if n % i == 0:
break
else:
p.append(n)
J'utilise la une structure spéciale propre à python : for.... else.
C'est à dire que le bloc suivant le mot-clé else ne sera exécuté qu'à condition que la boucle se finisse normalement ( et non par un break ).
Ça me semble être un peu meilleur pour la clarté de ton code et son volume... Mais niveau performances, ça ne doit pas changer grand chose.
( d'ailleurs en passant, j'ai pas compris pourquoi tu incrémentes n de 2 à chaque fois.... Ça doit être une propriété arithmétique que je ne connais pas...).
Et sinon une astuce bien bien plus intéressante pour augmenter drastiquement la vitesse d'exécution de ton code : tu peux te contenter de regarder si n est divisible par un des nombres entre 2 et sqrt(n).... Au dessus de la racine de ton nombre, c'est simplement les multiples " complémentaires " que tu trouveras.
Du coup, si le nombre est multiple avec aucun nombre inférieur à sa racine, alors il est premier... Je te laisse modifier ce qu'il faut en conséquence. 
( ah et je tiens à préciser que je ne suis qu'en L1, donc ce que je dis est à prendre avec des pincettes, y a forcément moyen de faire un truc encore plus simple, mais je te montre déjà quelque chose de plus clair, plus propre, et plus performant si tu utilises l'astuce arithmétique que je t'ai donné )
Message édité le 06 octobre 2016 à 20:46:51 par Grimmys