¿Es múltiplo de 3?

La semana pasada, Andrea explicó a sus pequeños alumnos la prueba de divisibilidad por 3. “Un número es divisible por 3 — les contó — si la suma de sus dígitos lo es”.

Para que la practicaran, decidió ponerles ejercicios. Pero, en un dudoso alarde de astucia, en lugar de ponerles muchos números largos, por acortar, les planteó un enunciado extraño. Cada ejercicio era un valor n con el que formar un gran número a partir de la concatenación de todos los números entre 1 y n. Por ejemplo, para n = 2, el número generado era el 12, para n = 6 el 123.456, y para n = 13 el gigantesco 12.345.678.910.111.213. Lo que Andrea pedía a sus chicos era que le dijeran si el número construído así era o no divisible por 3.

Esto le permitió poner ejercicios de enunciado corto, pero de solución larga. El problema llega ahora, que toca corregirlos.

Entrada

La entrada comienza con el número de casos de prueba. Cada caso de prueba se muestra en una línea y es un número entero positivo menor que 1.000.000.000.

Salida

Para cada caso de prueba, el programa escribirá “SI” si el número formado es múltiplo de 3, y “NO” en caso contrario.

Entrada de ejemplo

3
2
6
130000000

Salida de ejemplo

SI
SI
NO

Solución propuesta

def genera_numero(lenght):
    res = ''
    for n in range(1, lenght + 1):
        res += str(n)
    return int(res)


if __name__ == "__main__":
    respuestas = []
    iteraciones = int(input())
    for i in range(iteraciones):
        longitud = int(input())
        numero = genera_numero(longitud)
        if numero % 3 == 0:
            respuestas.append('SI')
        else:
            respuestas.append('NO')
    for respuesta in respuestas:
        print(respuesta)

Este ejercicio es muy sencillo, pero de vez en cuando no está mal refrescar conceptos. En este caso el múltiplo de un número, significa que es divisible por ese número. Por tanto, por cada número de prueba lo único que debemos hacer es calcular su módulo, es decir, su resto y si es cero es múltiplo (o divisible) por 3.

Lo único reseñable de este código es la función genera_numero, que se le pasa la longiud podríamos decir y devolvemos el número que queremos. En nuestro caso solo hemos de ir desde el 1 hasta el número concatenando dichos numeros en una cadena y a la hora de devolverla, se realiza la conversión a entero y listo.

Enlace del código

Enlace en aceptaelreto.com

Publicado el 13 de noviembre de 2017