Advertisement
Guest User

Untitled

a guest
Jul 24th, 2014
225
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 1.09 KB | None | 0 0
  1. from math import *
  2.  
  3. # Square
  4. def Sqr(a):
  5. return a * a
  6.  
  7. # Fill the table of powers for a^b <= 10^18, b >= 5 (5702 entries)
  8. # The pow function is used to avoid overflow, but exact powers are stored
  9. Powers= {}
  10. a= 2
  11. while pow(a, 5) <= 1.e18:
  12. a_b= a * Sqr(Sqr(a))
  13. b= 5
  14. while pow(a, b) <= 1.e18:
  15. Powers[a_b]= (a, b)
  16. a_b*= a
  17. b+= 1
  18. a+= 1
  19.  
  20. # Returns (a, b) such that a^b = n, or None
  21. def IsPower(n):
  22. # Test small powers
  23. # For safety, floor(n^(1/b)) and floor(n^(1/b)) + 1 are tried
  24. a= int(floor(pow(n, 0.5)))
  25. if Sqr(a) == n:
  26. return (a, 2)
  27. a+= 1
  28. if Sqr(a) == n:
  29. return (a, 2)
  30.  
  31. a= int(floor(pow(n, 1. / 3)))
  32. if a * Sqr(a) == n:
  33. return (a, 3)
  34. a+= 1
  35. if a * Sqr(a) == n:
  36. return (a, 3)
  37.  
  38. a= int(floor(pow(n, 0.25)))
  39. if Sqr(Sqr(a)) == n:
  40. return (a, 4)
  41. a+= 1
  42. if Sqr(Sqr(a)) == n:
  43. return (a, 4)
  44.  
  45. # Lookup large powers
  46. if n in Powers:
  47. return Powers[n]
  48.  
  49. print IsPower(125)
  50. print IsPower(94143178827)
  51. print IsPower(42)
  52. print IsPower(6436343)
  53.  
  54. (5, 3)
  55. (3, 23)
  56. None
  57. (23, 5)
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement