fork download
  1. # Integer logarithm.
  2.  
  3. def ilog_floor(x, base):
  4. if x <= 0:
  5. raise ValueError('math domain error')
  6. r = 0
  7. while True:
  8. x //= base
  9. if x == 0:
  10. return r
  11. r += 1
  12.  
  13. def ilog_ceil(x, base):
  14. if x <= 0:
  15. raise ValueError('math domain error')
  16. r = 0
  17. while x != 1:
  18. x = -(x // -base)
  19. r += 1
  20. return r
  21.  
  22. # ..
  23.  
  24. import math
  25.  
  26. basemax = 10
  27. xmax = 1000
  28.  
  29. for base in range(2, basemax+1):
  30. for x in range(1, xmax+1):
  31. u = math.floor(math.log(x, base))
  32. v = ilog_floor(x, base)
  33. if u != v:
  34. print('floor/log:', (x, base), 'u:', u, 'v:', v)
  35. print(f'{base}**{u} = {base**u}')
  36. print(f'{base}**{v} = {base**v}')
  37.  
  38. for base in range(2, basemax+1):
  39. for x in range(1, xmax+1):
  40. u = math.ceil(math.log(x, base))
  41. v = ilog_ceil(x, base)
  42. if u != v:
  43. print('ceil/log:', (x, base), 'u:', u, 'v:', v)
  44. print(f'{base}**{u} = {base**u}')
  45. print(f'{base}**{v} = {base**v}')
Success #stdin #stdout 0.14s 14264KB
stdin
Standard input is empty
stdout
floor/log: (243, 3) u: 4 v: 5
3**4 = 81
3**5 = 243
floor/log: (1000, 10) u: 2 v: 3
10**2 = 100
10**3 = 1000
ceil/log: (125, 5) u: 4 v: 3
5**4 = 625
5**3 = 125
ceil/log: (216, 6) u: 4 v: 3
6**4 = 1296
6**3 = 216