





"""simple docstring"""





from timeit import timeit
def  __A   (_SCREAMING_SNAKE_CASE			)					->int:





  """simple docstring"""


  if number < 0:
    raise ValueError('the value of input must not be negative'			)
  lowerCAmelCase__			:List[str]											=							0
  while number:
    number &= number - 1
    result += 1
  return result
def  __A   (_SCREAMING_SNAKE_CASE			)					->int:





  """simple docstring"""


  if number < 0:
    raise ValueError('the value of input must not be negative'			)
  lowerCAmelCase__			:Optional[Any]											=							0
  while number:
    if number % 2 == 1:
      result += 1
    number >>= 1
  return result
def  __A   ()					->None:





  """simple docstring"""


  def do_benchmark(_SCREAMING_SNAKE_CASE			) -> None:
    lowerCAmelCase__			:int											=							'import __main__ as z'
    print(F"Benchmark when {number = }:"			)
    print(F"{get_set_bits_count_using_modulo_operator(_SCREAMING_SNAKE_CASE			) = }"			)
    lowerCAmelCase__			:Union[str, Any]											=							timeit('z.get_set_bits_count_using_modulo_operator(25)'     ,   setup=_SCREAMING_SNAKE_CASE			)
    print(F"timeit() runs in {timing} seconds"			)
    print(F"{get_set_bits_count_using_brian_kernighans_algorithm(_SCREAMING_SNAKE_CASE			) = }"			)
    lowerCAmelCase__			:Optional[Any]											=							timeit(
        'z.get_set_bits_count_using_brian_kernighans_algorithm(25)'     ,   setup=_SCREAMING_SNAKE_CASE     ,   )
    print(F"timeit() runs in {timing} seconds"			)

  for number in (25, 37, 58, 0):
    do_benchmark(_SCREAMING_SNAKE_CASE			)
    print()


if __name__ == "__main__":
  import doctest

  doctest.testmod()
  benchmark()







"""simple docstring"""





import math
def  __A   (_SCREAMING_SNAKE_CASE			)					->int:





  """simple docstring"""


  if not isinstance(_SCREAMING_SNAKE_CASE     ,   _SCREAMING_SNAKE_CASE			):
    lowerCAmelCase__			:Dict											=							F"Input value of [number={number}] must be an integer"
    raise TypeError(_SCREAMING_SNAKE_CASE			)

  if number < 1:
    lowerCAmelCase__			:Dict											=							F"Input value of [number={number}] must be > 0"
    raise ValueError(_SCREAMING_SNAKE_CASE			)
  elif number == 1:
    return 3
  elif number == 2:
    return 5
  else:
    lowerCAmelCase__			:Union[str, Any]											=							int(math.log(number // 3     ,   2			)			) + 2

    lowerCAmelCase__			:Optional[Any]											=							[3, 5]
    lowerCAmelCase__			:Optional[Any]											=							2
    lowerCAmelCase__			:List[str]											=							3
    for block in range(1     ,   _SCREAMING_SNAKE_CASE			):
      for _ in range(_SCREAMING_SNAKE_CASE			):
        proth_list.append(2 ** (block + 1) + proth_list[proth_index - 1]			)
        proth_index += 1
      increment *= 2

  return proth_list[number - 1]


if __name__ == "__main__":
  import doctest

  doctest.testmod()

  for number in range(11):
    __A											=		0
    try:
      __A											=		proth(number)
    except ValueError:
      print(F'''ValueError: there is no {number}th Proth number''')
      continue

    print(F'''The {number}th Proth number: {value}''')
