import math
from collections.abc import Generator

def 	__lowerCamelCase							(				__a    : int		)      ->       Generator[int, None, None]:
	_lowercase   =(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 	__lowerCamelCase							(				__a    : int		)      ->       Generator[int, None, None]:
	_lowercase   =(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)
		_lowercase   =int(math.sqrt(__a		)		) + 1
		for j in range(2      ,							__a		):
			if (i % j) == 0:
				break
		else:
			yield i

def 	__lowerCamelCase							(				__a    : int		)      ->       Generator[int, None, None]:
	_lowercase   =(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):
		_lowercase   =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 	__lowerCamelCase							(				)      ->       List[Any]:
	from timeit import timeit

	_lowercase   ="from __main__ import slow_primes, primes, fast_primes"
	print(timeit("slow_primes(1_000_000_000_000)"      ,							setup=__a      ,							number=1_000_000		)		)
	print(timeit("primes(1_000_000_000_000)"      ,							setup=__a      ,							number=1_000_000		)		)
	print(timeit("fast_primes(1_000_000_000_000)"      ,							setup=__a      ,							number=1_000_000		)		)


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











def   _SCREAMING_SNAKE_CASE      (	snake_case_		:						int						):
     if not isinstance(snake_case_ ,     snake_case_						):
          __magic_name__				=       f'Input value of [number={number}] must be an integer'
          raise TypeError(snake_case_						)
     if number < 0 or number % 2 == 1:
          return False
     __magic_name__				=       int(number**0.5						)
     return number == number_sqrt * (number_sqrt + 1)


if __name__ == "__main__":
    import doctest

    doctest.testmod()