


'''simple docstring'''







import math
from collections.abc import Generator



def 						_UpperCamelCase							( UpperCamelCase__		):






				"""simple docstring"""



				__magic_name__				:					int						       =       (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     ,   _A		):
												if (i % j) == 0:
																break
								else:
												yield i



def 						_UpperCamelCase							( UpperCamelCase__		):






				"""simple docstring"""



				__magic_name__				:					Dict						       =       (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)
								__magic_name__				:					Any						       =       int(math.sqrt(_A		)		) + 1
								for j in range(2     ,   _A		):
												if (i % j) == 0:
																break
								else:
												yield i



def 						_UpperCamelCase							( UpperCamelCase__		):






				"""simple docstring"""



				__magic_name__				:					str						       =       (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):
								__magic_name__				:					List[str]						       =       int(math.sqrt(_A		)		) + 1
								for j in range(3     ,   _A     ,   2		):
												# As we removed the even numbers, we don't need them now
												if (i % j) == 0:
																break
								else:
												yield i



def 						_UpperCamelCase							( ):






				"""simple docstring"""



				from timeit import timeit

				__magic_name__				:					List[Any]						       =       "from __main__ import slow_primes, primes, fast_primes"
				print(timeit("slow_primes(1_000_000_000_000)"     ,   setup=_A     ,   number=1000000		)		)
				print(timeit("primes(1_000_000_000_000)"     ,   setup=_A     ,   number=1000000		)		)
				print(timeit("fast_primes(1_000_000_000_000)"     ,   setup=_A     ,   number=1000000		)		)


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



'''simple docstring'''







def 						_UpperCamelCase							( UpperCamelCase__		):






				"""simple docstring"""



				if not isinstance(UpperCamelCase__     ,   UpperCamelCase__		) or number < 0:
								raise ValueError("Input must be a non-negative integer"		)

				__magic_name__				:					str						       =       number & ~(number - 1)
				__magic_name__				:					Optional[int]						       =       0
				while intermediate:
								intermediate >>= 1
								index += 1
				return index - 1


if __name__ == "__main__":
		import doctest

		doctest.testmod(verbose=True)