
'''simple docstring'''


def 					__magic_name__(       UpperCAmelCase__ :       str							,				UpperCAmelCase__ :       int	):
						UpperCamelCase_     :	Any					     =     1
						while b > 0:
												if b & 1:
																		res *= a

												a *= a
												b >>= 1

						return res
def 					__magic_name__(       UpperCAmelCase__ :       Union[str, Any]							,				UpperCAmelCase__ :       Tuple							,				UpperCAmelCase__ :       Union[str, Any]	):
						UpperCamelCase_     :	Union[str, Any]					     =     1
						while b > 0:
												if b & 1:
																		UpperCamelCase_     :	List[Any]					     =     ((res % c) * (a % c)) % c

												a *= a
												b >>= 1

						return res






'''simple docstring'''


import math
from collections.abc import Generator
def 					__magic_name__(       UpperCAmelCase__ :       int	):
						UpperCamelCase_     :	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							,				UpperCAmelCase__	):
																		if (i % j) == 0:
																								break
												else:
																		yield i
def 					__magic_name__(       UpperCAmelCase__ :       int	):
						UpperCamelCase_     :	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)
												UpperCamelCase_     :	List[Any]					     =     int(math.sqrt(UpperCAmelCase__	)	) + 1
												for j in range(2							,				UpperCAmelCase__	):
																		if (i % j) == 0:
																								break
												else:
																		yield i
def 					__magic_name__(       UpperCAmelCase__ :       int	):
						UpperCamelCase_     :	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):
												UpperCamelCase_     :	Optional[int]					     =     int(math.sqrt(UpperCAmelCase__	)	) + 1
												for j in range(3							,				UpperCAmelCase__							,				2	):
																		# As we removed the even numbers, we don't need them now
																		if (i % j) == 0:
																								break
												else:
																		yield i
def 					__magic_name__(       ):
						from timeit import timeit

						UpperCamelCase_     :	int					     =     """from __main__ import slow_primes, primes, fast_primes"""
						print(timeit("""slow_primes(1_000_000_000_000)"""							,				setup=UpperCAmelCase__							,				number=1000000	)	)
						print(timeit("""primes(1_000_000_000_000)"""							,				setup=UpperCAmelCase__							,				number=1000000	)	)
						print(timeit("""fast_primes(1_000_000_000_000)"""							,				setup=UpperCAmelCase__							,				number=1000000	)	)


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




