


"""simple docstring"""






def __lowercase  (   lowerCamelCase_	:   Optional[int]    ,       lowerCamelCase_	:   int    ,       lowerCamelCase_	:   List[str]    ,       lowerCamelCase_	:   Dict    ,       lowerCamelCase_	:   Dict	):
				if target == 0:
								answer.append(path.copy()	)
				else:
								for index in range(UpperCamelCase_    ,       len(UpperCamelCase_	)	):
												if target >= candidates[index]:
																path.append(candidates[index]	)
																backtrack(UpperCamelCase_    ,       UpperCamelCase_    ,       UpperCamelCase_    ,       target - candidates[index]    ,       UpperCamelCase_	)
																path.pop(len(UpperCamelCase_	) - 1	)


def __lowercase  (   lowerCamelCase_	:   str    ,       lowerCamelCase_	:   List[str]	):
				SCREAMING_SNAKE_CASE__  				=					[]  # type: list[int]
				SCREAMING_SNAKE_CASE__  				=					[]  # type: list[int]
				backtrack(UpperCamelCase_    ,       UpperCamelCase_    ,       UpperCamelCase_    ,       UpperCamelCase_    ,       0	)
				return answer


def __lowercase  (   ):
				print(combination_sum([-8, 2.3, 0]    ,       1	)	)


if __name__ == "__main__":
	import doctest

	doctest.testmod()
	main()







from itertools import compress, repeat
from math import ceil, sqrt




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

       if num <= 2:
              return []
       if num == 3:
              return [2]

       # Odd sieve for numbers in range [3, num - 1]
       UpperCamelCase_ 							=	bytearray(b"\x01"	) * ((num >> 1) - 1)

       for i in range(3       ,		int(sqrt(UpperCamelCase_	)	) + 1       ,		2	):
              if sieve[(i >> 1) - 1]:
                     UpperCamelCase_ 							=	i**2
                     UpperCamelCase_ 							=	repeat(
                         0       ,		ceil((num - i_squared) / (i << 1)	)	)

       return [2] + list(compress(range(3       ,		UpperCamelCase_       ,		2	)       ,		UpperCamelCase_	)	)


if __name__ == "__main__":
     import doctest

     doctest.testmod()

