fork download
  1. number = 600851475143
  2.  
  3. def get_p_max(number, current_p_max):
  4. # in this case number is a prime number
  5. if number <= 3 or current_p_max ** 2 > number:
  6. return number
  7.  
  8. # special case for 2
  9. if current_p_max <= 2 and number % 2 == 0:
  10. return get_p_max(number//2, 2)
  11. else:
  12. sq = int(number**0.5)
  13. for i in range(max(3, current_p_max), sq + 1, 2):
  14. if number % i == 0:
  15. return get_p_max(number//i, i)
  16.  
  17. # measn 'number' is a prime
  18. return number
  19.  
  20. test_cases = [1, 2, 3, 4, 5, 8, 9, 10, 2047, 2048, 2049, 997*997-1, 997*997, 997*997+1, number]
  21.  
  22. for num in test_cases:
  23. print(num, get_p_max(num, 1))
  24.  
  25.  
Success #stdin #stdout 0.03s 9456KB
stdin
Standard input is empty
stdout
1 1
2 2
3 3
4 2
5 5
8 2
9 3
10 5
2047 89
2048 2
2049 683
994008 499
994009 997
994010 99401
600851475143 6857