






'''simple docstring'''


import math
from collections.abc import Generator






def   lowerCAmelCase__			(					SCREAMING_SNAKE_CASE__		):
 __a    :	Generator									=						(i for i in range(1       ,		(max_n + 1)		))
 for i in (n for n in numbers if n > 1):
  for j in range(2       ,		SCREAMING_SNAKE_CASE__		):
   if (i % j) == 0:
    break
  else:
   yield i






def   lowerCAmelCase__			(					SCREAMING_SNAKE_CASE__		):
 __a    :	Generator									=						(i for i in range(1       ,		(max_n + 1)		))
 for i in (n for n in numbers if n > 1):
  # only need to check for factors up to sqrt(i)
  __a    :	List[Any]									=						int(math.sqrt(SCREAMING_SNAKE_CASE__		)		) + 1
  for j in range(2       ,		SCREAMING_SNAKE_CASE__		):
   if (i % j) == 0:
    break
  else:
   yield i






def   lowerCAmelCase__			(					SCREAMING_SNAKE_CASE__		):
 __a    :	Generator									=						(i for i in range(1       ,		(max_n + 1)       ,		2		))
 # It's useless to test even numbers as they will not be prime
 if max_n > 2:
  yield 2  # Because 2 will not be tested, it's necessary to yield it now
 for i in (n for n in numbers if n > 1):
  __a    :	Optional[int]									=						int(math.sqrt(SCREAMING_SNAKE_CASE__		)		) + 1
  for j in range(3       ,		SCREAMING_SNAKE_CASE__       ,		2		):
   # As we removed the even numbers, we don't need them now
   if (i % j) == 0:
    break
  else:
   yield i






def   lowerCAmelCase__			(					):
 from timeit import timeit

 __a    :	str									=						'from __main__ import slow_primes, primes, fast_primes'
 print(timeit('slow_primes(1_000_000_000_000)'       ,		setup=SCREAMING_SNAKE_CASE__       ,		number=1000000		)		)
 print(timeit('primes(1_000_000_000_000)'       ,		setup=SCREAMING_SNAKE_CASE__       ,		number=1000000		)		)
 print(timeit('fast_primes(1_000_000_000_000)'       ,		setup=SCREAMING_SNAKE_CASE__       ,		number=1000000		)		)


if __name__ == "__main__":
  SCREAMING_SNAKE_CASE_				      =							int(input("Calculate primes up to:\n>> ").strip())
  for ret in primes(number):
    print(ret)
  benchmark()












'''simple docstring'''


import math
from timeit import timeit






def   lowerCAmelCase__			(					SCREAMING_SNAKE_CASE__		):
 __a    :	Any									=						0
 __a    :	List[Any]									=						abs(SCREAMING_SNAKE_CASE__		)
 while True:
  __a    :	int									=						n // 10
  digits += 1
  if n == 0:
   break
 return digits






def   lowerCAmelCase__			(					SCREAMING_SNAKE_CASE__		):
 return 1 if n == 0 else math.floor(math.log(abs(SCREAMING_SNAKE_CASE__		)       ,		10		) + 1		)






def   lowerCAmelCase__			(					SCREAMING_SNAKE_CASE__		):
 return len(str(abs(SCREAMING_SNAKE_CASE__		)		)		)






def   lowerCAmelCase__			(					):
 from collections.abc import Callable

 def benchmark_a_function(SCREAMING_SNAKE_CASE__       ,		SCREAMING_SNAKE_CASE__		) -> None:
  __a    :	Tuple									=						f'''{func.__name__}({value})'''
  __a    :	List[Any]									=						timeit(f'''__main__.{call}'''       ,		setup='import __main__'		)
  print(f'''{call}: {func(SCREAMING_SNAKE_CASE__		)} -- {timing} seconds'''		)

 for value in (262144, 1125899906842624, 1267650600228229401496703205376):
  for func in (num_digits, num_digits_fast, num_digits_faster):
   benchmark_a_function(SCREAMING_SNAKE_CASE__       ,		SCREAMING_SNAKE_CASE__		)
  print()


if __name__ == "__main__":
  import doctest

  doctest.testmod()
  benchmark()




