



from math import isqrt



def 	__a					(   lowerCAmelCase_       : int    )				->			list[int]:






						'''simple docstring'''



						UpperCAmelCase_=       [True] * max_number
						for i in range(2      ,isqrt(max_number - 1    ) + 1    ):
												if is_prime[i]:
																		for j in range(i**2      ,lowerCAmelCase_      ,lowerCAmelCase_    ):
																								UpperCAmelCase_=       False

						return [i for i in range(2      ,lowerCAmelCase_    ) if is_prime[i]]



def 	__a					(   lowerCAmelCase_       : int = 10**8    )				->			int:






						'''simple docstring'''



						UpperCAmelCase_=       calculate_prime_numbers(max_number // 2    )

						UpperCAmelCase_=       0
						UpperCAmelCase_=       0
						UpperCAmelCase_=       len(lowerCAmelCase_    ) - 1
						while left <= right:
												while prime_numbers[left] * prime_numbers[right] >= max_number:
																		right -= 1
												semiprimes_count += right - left + 1
												left += 1

						return semiprimes_count


if __name__ == "__main__":
	print(f'{solution() = }')









import warnings
from functools import wraps
from typing import Callable



def 	__a					(   lowerCAmelCase_       : Callable    )				->			Callable:






						'''simple docstring'''



						@wraps(lowerCAmelCase_    )
						def _inner_fn(*lowerCAmelCase_       : List[Any]      ,**lowerCAmelCase_       : Tuple    ):
												warnings.warn(
												    (F"""'{fn.__name__}' is experimental and might be subject to breaking changes in the future.""")      ,lowerCAmelCase_      ,)
												return fn(*lowerCAmelCase_      ,**lowerCAmelCase_    )

						return _inner_fn




