Enunciado 3

Los factores primos de 13195 son 5, 7, 13 y 29.

¿Cual es el mayor factor primo del número 600851475143?

Solución

La solución fue obtenida en el intérprete interactivo de Python 2.5.2:

>>> from math import sqrt
>>> the_number = 600851475143
>>> my_number = sqrt(the_number)
>>> my_number
775146.09922452678
>>> my_number = int(my_number)
>>> my_number
775146
>>> def esprimo(n):
...     for i in xrange(2,int(sqrt(n))+1):
...             if n % i == 0:
...                     return False
...     return True
...
>>> esprimo(8)
False
>>> esprimo(3)
True
>>> esprimo(6823)
True
>>> esprimo(100109)
True
>>> esprimo(100110)
False
>>> for i in xrange(1, my_number+1):
...      if the_number % i == 0 and esprimo(i):
...             print i
...
1
71
839
1471
6857

Python tips

  • xrange, en lugar de crear una lista entera de números como hace range devuelve un generador que va entregando números a medida que los necesitamos.
  • La clase int se instancia para obtener enteros. Si la llamamos con un float como parámetro, podemos usarla para forzar un entero.