



"""simple docstring"""




import qiskit
from qiskit.providers import Backend

def 		__snake_case		(   SCREAMING_SNAKE_CASE__			:		int		,						SCREAMING_SNAKE_CASE__			:		int       ):





     '''simple docstring'''

     _UpperCAmelCase    :			Optional[Any]              =					bin(SCREAMING_SNAKE_CASE__       )[2:], bin(SCREAMING_SNAKE_CASE__       )[2:]  # Remove leading '0b'

     # Ensure that both strings are of the same length
     if len(SCREAMING_SNAKE_CASE__       ) > len(SCREAMING_SNAKE_CASE__       ):
          _UpperCAmelCase    :			List[Any]              =					y.zfill(len(SCREAMING_SNAKE_CASE__       )       )
     else:
          _UpperCAmelCase    :			List[Any]              =					x.zfill(len(SCREAMING_SNAKE_CASE__       )       )

     # We need (3 * number of bits in the larger number)+1 qBits
     # The second parameter is the number of classical registers, to measure the result
     _UpperCAmelCase    :			Optional[int]              =					qiskit.QuantumCircuit((len(SCREAMING_SNAKE_CASE__       ) * 3) + 1		,						len(SCREAMING_SNAKE_CASE__       ) + 1       )

     # We are essentially "not-ing" the bits that are 1
     # Reversed because it's easier to perform ops on more significant bits
     for i in range(len(SCREAMING_SNAKE_CASE__       )       ):
          if x[::-1][i] == "1":
               circuit.x(SCREAMING_SNAKE_CASE__       )
     for j in range(len(SCREAMING_SNAKE_CASE__       )       ):
          if y[::-1][j] == "1":
               circuit.x(len(SCREAMING_SNAKE_CASE__       ) + j       )

     return circuit, x, y

def 		__snake_case		(   SCREAMING_SNAKE_CASE__			:		qiskit.QuantumCircuit		,						SCREAMING_SNAKE_CASE__			:		int		,						SCREAMING_SNAKE_CASE__			:		int		,						SCREAMING_SNAKE_CASE__			:		int		,						SCREAMING_SNAKE_CASE__			:		int		,						):





     '''simple docstring'''

     circuit.ccx(SCREAMING_SNAKE_CASE__		,						SCREAMING_SNAKE_CASE__		,						SCREAMING_SNAKE_CASE__       )
     circuit.cx(SCREAMING_SNAKE_CASE__		,						SCREAMING_SNAKE_CASE__       )
     circuit.ccx(SCREAMING_SNAKE_CASE__		,						SCREAMING_SNAKE_CASE__		,						SCREAMING_SNAKE_CASE__       )
     circuit.cx(SCREAMING_SNAKE_CASE__		,						SCREAMING_SNAKE_CASE__       )
     circuit.cx(SCREAMING_SNAKE_CASE__		,						SCREAMING_SNAKE_CASE__       )

def 		__snake_case		(   SCREAMING_SNAKE_CASE__			:		int		,						SCREAMING_SNAKE_CASE__			:		int		,						SCREAMING_SNAKE_CASE__			:		Backend = qiskit.Aer.get_backend("aer_simulator"       )		,						):





     '''simple docstring'''

     if vala < 0 or vala < 0:
          raise ValueError("Both Integers must be positive!"       )

     # Store the Integers
     _UpperCAmelCase    :			List[Any]              =					store_two_classics(SCREAMING_SNAKE_CASE__		,						SCREAMING_SNAKE_CASE__       )
     for i in range(len(SCREAMING_SNAKE_CASE__       )       ):
          full_adder(SCREAMING_SNAKE_CASE__		,						SCREAMING_SNAKE_CASE__		,						len(SCREAMING_SNAKE_CASE__       ) + i		,						len(SCREAMING_SNAKE_CASE__       ) + len(SCREAMING_SNAKE_CASE__       ) + i		,						len(SCREAMING_SNAKE_CASE__       ) + len(SCREAMING_SNAKE_CASE__       ) + i + 1       )
          circuit.barrier()  # Optional, just for aesthetics

     # Measure the resultant qBits
     for i in range(len(SCREAMING_SNAKE_CASE__       ) + 1       ):
          circuit.measure([(len(SCREAMING_SNAKE_CASE__       ) * 2) + i]		,						[i]       )

     _UpperCAmelCase    :			Any              =					qiskit.execute(SCREAMING_SNAKE_CASE__		,						SCREAMING_SNAKE_CASE__		,						shots=1       ).result()

     # The result is in binary. Convert it back to int
     return int(list(res.get_counts()       )[0]		,						2       )


if __name__ == "__main__":
 import doctest

 doctest.testmod()





"""simple docstring"""




_lowerCAmelCase       :      str							=							{
    "0": 1,
    "1": 1,
    "2": 2,
    "3": 6,
    "4": 24,
    "5": 1_20,
    "6": 7_20,
    "7": 50_40,
    "8": 4_03_20,
    "9": 36_28_80,
}

_lowerCAmelCase       :      Optional[int]							=							{1_45: 1_45}

_lowerCAmelCase       :      int							=							{
    1_45: 0,
    1_69: 3,
    3_63_01: 3,
    14_54: 3,
    8_71: 2,
    4_53_61: 2,
    8_72: 2,
}

def 		__snake_case		(   SCREAMING_SNAKE_CASE__			:		int       )						->     int:





     '''simple docstring'''

     if n in CACHE_SUM_DIGIT_FACTORIALS:
          return CACHE_SUM_DIGIT_FACTORIALS[n]
     _UpperCAmelCase    :			Dict              =					sum(DIGIT_FACTORIALS[let] for let in str(SCREAMING_SNAKE_CASE__       )       )
     _UpperCAmelCase    :			Any              =					ret
     return ret

def 		__snake_case		(   SCREAMING_SNAKE_CASE__			:		int		,						SCREAMING_SNAKE_CASE__			:		set | None = None       )						->     int:





     '''simple docstring'''

     _UpperCAmelCase    :			Dict              =					previous or set()
     if n in CHAIN_LENGTH_CACHE:
          return CHAIN_LENGTH_CACHE[n]
     _UpperCAmelCase    :			Dict              =					sum_digit_factorials(SCREAMING_SNAKE_CASE__       )
     if next_number in previous:
          _UpperCAmelCase    :			List[str]              =					0
          return 0
     else:
          previous.add(SCREAMING_SNAKE_CASE__       )
          _UpperCAmelCase    :			str              =					1 + chain_length(SCREAMING_SNAKE_CASE__		,						SCREAMING_SNAKE_CASE__       )
          _UpperCAmelCase    :			str              =					ret
          return ret

def 		__snake_case		(   SCREAMING_SNAKE_CASE__			:		int = 60		,						SCREAMING_SNAKE_CASE__			:		int = 1_000_000       )						->     int:





     '''simple docstring'''

     return sum(1 for i in range(1		,						SCREAMING_SNAKE_CASE__       ) if chain_length(SCREAMING_SNAKE_CASE__       ) == num_terms       )


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