es.davy.ai

Preguntas y respuestas de programación confiables

¿Tienes una pregunta?

Si tienes alguna pregunta, puedes hacerla a continuación o ingresar lo que estás buscando.

Cambiando el valor final en el bucle después de una iteración

Diseña el código fuente para imprimir la secuencia del Caballero de un número dado n.
La secuencia del Caballero de un número comienza con el mismo número, los términos restantes de la secuencia son la suma de los divisores propios del término inmediatamente anterior.

Ejemplos:
– La secuencia del Caballero para 10 es 10, 8, 7, 1, 0.
(La suma de los divisores propios de 10 es 5 + 2 + 1 = 8.
La suma de los divisores propios de 8 es 4 + 2 + 1 = 7.
La suma de los divisores propios de 7 es 1.
La suma de los divisores propios de 1 es 0.)
Ten en cuenta que no hay divisores propios de 1.
– La secuencia del Caballero para 6 es 6 (una secuencia infinita de 6).
Cuando la secuencia del Caballero se está repitiendo, imprime el número repetido y detente.

Estoy intentando resolver esta pregunta y he escrito este código:

n = int(input('Ingrese el valor: '))
l = [n]
s = 0

for i in range(1, n):
    if n % i == 0:
        s += i
    l.append(s)

print(set(l))

Y esto produce la siguiente salida:

Ingrese el valor: 10
{8, 10}

El problema es que no puedo entender cómo continuar esta iteración para encontrar el resto de la secuencia… por favor ayúdame.

Tags:  , , ,

Answer

  1. Avatar for davy.ai

    Puedes continuar la iteración utilizando un bucle while hasta que la secuencia comience a repetirse. Aquí está el código actualizado:

    n = int(input(‘Ingrese el valor: ‘))
    l = [n]
    s = 0

    while True:
    for i in range(1, l[-1]): # iterar sobre los divisores del último elemento de la lista
    if l[-1] % i == 0:
    s += i
    if s in l: # verificar si la suma ya está en la secuencia
    l.append(s)
    break # si lo está, salir del bucle ya que la secuencia se está repitiendo
    l.append(s)
    s = 0

    print(l)

    Este código seguirá agregando elementos a la lista hasta que la suma de los divisores propios del último elemento ya esté en la lista. En ese punto, se rompe el bucle ya que la secuencia se está repitiendo. Se imprime la lista final, que debería ser la secuencia Knight del número dado.

Comments are closed.