markajino:
Estoy aprendiendo Python haciendo Proyecto Euler preguntas y estoy atascado en Problema # 3 .
Creo que he encontrado una solución que funciona, pero al insertar el gran número 600851475143 simplemente no devuelve nada. Creo que sólo cargas y cargas causan incluso con 6.008.514 se tarda 10 segundos para devolver la respuesta.
# What is the largest prime factor of the number x?
import math
def isPrime(x):
try:
sqr = math.sqrt(x)
if x == 0 or x == 1:
return 0
for n in range (2 , int(sqr)+1):
if x % n == 0:
return 0
return 1
except:
return 'Give positive numbers.'
def largestPrimeFactor(x):
if isPrime(x) == 1:
return 'This number is prime.'
else:
largest = -1
mid = x/2
for n in range(2,int(mid)+1):
if isPrime(n):
if x % n == 0:
largest = n
if largest == -1:
return 'Enter numbers above 1.'
else:
return largest
print(largestPrimeFactor(600851475143))
Jasar Orion:
tengo otra manera:
def Largest_Prime_Factor(n):
prime_factor = 1
i = 2
while i <= n / i:
if n % i == 0:
prime_factor = i
n /= i
else:
i += 1
if prime_factor < n:
prime_factor = n
return prime_factor
es más rápido que el anterior