50 monedas están alineadas sobre una mesa (inicialmente todas las caras hacia arriba). 50 personas pasan de las monedas una por una de la siguiente manera:
Viene la primera persona y visita las monedas numeradas 1, 2, 3, 4,…. y lanza las monedas hasta que salga una cara opuesta (Por ejemplo, si fue cara inicialmente, la voltea hasta que salga cruz y viceversa.)
La segunda persona viene y visita las monedas numeradas 2, 4, 6, 8… .. y lanza las monedas.
Del mismo modo, la tercera persona viene y visita (3, 6, 9, 12, ……) y hace lo mismo.
La tarea es encontrar los estados finales de todas las monedas después de que pase la 50ª persona, es decir, si una moneda está cara o cruz hacia arriba.
Solución: El truco es identificar si una moneda está siendo visitada por personas par o impar de veces.
Preste atención al número de moneda.
Solo los cuadrados perfectos tienen números impares. de factores, y cualquier otro número tiene un número par de factores.
Para todas aquellas monedas que tengan un número impar de factores estarán caras cara arriba y para todas aquellas monedas que tengan un número par no. de factores estarán mirando hacia arriba.
Entonces, monedas numeradas 1, 4, 9, 16, 25…. tendrán cola y 2, 3, 5, 6, 7, 10, 11,… tendrán la cabeza hacia arriba.
from math import floor, sqrt def getTails(n): return floor(sqrt(n)) if __name__ == "__main__": n = 50 print(getTails(50))
7