2 votes

Comment utiliser correctement les listes ici ?

Mon problème est le suivant : Je veux créer un programme qui accepte des nombres entiers supérieurs à 0 et inférieurs à 21, séparés les uns des autres par un espace. Je veux ensuite créer une liste, dans laquelle les nombres premiers seront ajoutés sans aucune modification et les nombres non premiers seront divisés en éléments, qui seront des nombres premiers.

Entrée : 3 6 7 12

Salida: [3, 2, 3, 7, 2, 2, 3]

C'est ce que j'ai trouvé. Lorsque j'essaie d'exécuter le programme avec l'entrée mentionnée ci-dessus, pour 12, il ne sort que 2 et 3 sans autre 2. Quel peut être le problème ici ?

l_prime = [2,3,5,7,11,13,17,19]
l = []
disposable = None
iterate = input().split()
for i in iterate:
  a = int(i)
  for j in range (0,len(l_prime)):
    disposable = j
    if a == l_prime[j]:
      l.append(l_prime[j])
    else:
      if a % l_prime[disposable] == 0:
        l.append(l_prime[disposable])
        a = a / l_prime[disposable]
      else:
        if a <= 1:
          break
        else:
          disposable += 1
l

J'apprécierai toute aide ! Merci d'avance !

3voto

tobias_k Points 13121

En gros, il suffit de changer ceci if déclaration

if a % l_prime[disposable] == 0:

à un while boucle pour que vous puissiez ajouter des facteurs premiers répétés :

while a % l_prime[disposable] == 0:

Mais le code peut être encore simplifié. Tout d'abord, il n'est pas nécessaire de faire un cas particulier pour les nombres premiers ; il s'agit simplement de nombres qui ont un seul facteur premier. De plus, vous pouvez itérer les éléments de l_prime directement au lieu d'utiliser un index, et en particulier que disposable variable n'a aucun but. Compte tenu du faible nombre de nombres premiers à tester, vous pourriez même abandonner la variable break

for a in map(int, iterate):
    for p in l_prime:
        while a % p == 0:
            l.append(p)
            a //= p

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X