


def 			lowerCAmelCase (		lowerCAmelCase_ )-> int:
				lowerCAmelCase_ :      Optional[Any]    				=				abs(lowerCAmelCase_ )
				lowerCAmelCase_ :      Optional[Any]    				=				0
				while n > 0:
								res += n % 10
								n //= 10
				return res



def 			lowerCAmelCase (		lowerCAmelCase_ )-> int:
				lowerCAmelCase_ :      List[str]    				=				abs(lowerCAmelCase_ )
				return n if n < 10 else n % 10 + sum_of_digits(n // 10 )



def 			lowerCAmelCase (		lowerCAmelCase_ )-> int:
				return sum(int(lowerCAmelCase_ ) for c in str(abs(lowerCAmelCase_ ) ) )



def 			lowerCAmelCase (		)-> None:
				from collections.abc import Callable
				from timeit import timeit

				def benchmark_a_function(lowerCAmelCase_ ,   lowerCAmelCase_ ) -> None:
								lowerCAmelCase_ :      Any    				=				f"""{func.__name__}({value})"""
								lowerCAmelCase_ :      Union[str, Any]    				=				timeit(f"""__main__.{call}""" ,   setup='''import __main__''' )
								print(f"""{call:56} = {func(lowerCAmelCase_ )} -- {timing:.4f} seconds""" )

				for value in (262_144, 1_125_899_906_842_624, 1_267_650_600_228_229_401_496_703_205_376):
								for func in (sum_of_digits, sum_of_digits_recursion, sum_of_digits_compact):
												benchmark_a_function(lowerCAmelCase_ ,   lowerCAmelCase_ )
								print()


if __name__ == "__main__":
						import doctest

						doctest.testmod()
						benchmark()



import math

import qiskit



def 			lowerCAmelCase (		lowerCAmelCase_ = 1 ,   lowerCAmelCase_ = 1 ,   lowerCAmelCase_ = 1 )-> qiskit.result.counts.Counts:
				if (
				    isinstance(lowerCAmelCase_ ,   lowerCAmelCase_ )
				    or isinstance(lowerCAmelCase_ ,   lowerCAmelCase_ )
				    or isinstance(lowerCAmelCase_ ,   lowerCAmelCase_ )
				):
								raise TypeError('''inputs must be integers.''' )

				if (input_a < 0) or (input_a < 0) or (carry_in < 0):
								raise ValueError('''inputs must be positive.''' )

				if (
				    (math.floor(lowerCAmelCase_ ) != input_a)
				    or (math.floor(lowerCAmelCase_ ) != input_a)
				    or (math.floor(lowerCAmelCase_ ) != carry_in)
				):
								raise ValueError('''inputs must be exact integers.''' )

				if (input_a > 2) or (input_a > 2) or (carry_in > 2):
								raise ValueError('''inputs must be less or equal to 2.''' )

				# build registers
				lowerCAmelCase_ :      str    				=				qiskit.QuantumRegister(4 ,   '''qr''' )
				lowerCAmelCase_ :      str    				=				qiskit.ClassicalRegister(2 ,   '''cr''' )
				# list the entries
				lowerCAmelCase_ :      Any    				=				[input_a, input_a, carry_in]

				lowerCAmelCase_ :      int    				=				qiskit.QuantumCircuit(lowerCAmelCase_ ,   lowerCAmelCase_ )

				for i in range(0 ,   3 ):
								if entry[i] == 2:
												quantum_circuit.h(lowerCAmelCase_ )  # for hadamard entries
								elif entry[i] == 1:
												quantum_circuit.x(lowerCAmelCase_ )  # for 1 entries
								elif entry[i] == 0:
												quantum_circuit.i(lowerCAmelCase_ )  # for 0 entries

    # build the circuit
				quantum_circuit.ccx(0 ,   1 ,   3 )  # ccx = toffoli gate
				quantum_circuit.cx(0 ,   1 )
				quantum_circuit.ccx(1 ,   2 ,   3 )
				quantum_circuit.cx(1 ,   2 )
				quantum_circuit.cx(0 ,   1 )

				quantum_circuit.measure([2, 3] ,   lowerCAmelCase_ )  # measure the last two qbits

				lowerCAmelCase_ :      Tuple    				=				qiskit.Aer.get_backend('''aer_simulator''' )
				lowerCAmelCase_ :      Union[str, Any]    				=				qiskit.execute(lowerCAmelCase_ ,   lowerCAmelCase_ ,   shots=1_000 )

				return job.result().get_counts(lowerCAmelCase_ )


if __name__ == "__main__":
						print(f"""Total sum count for state is: {quantum_full_adder(1, 1, 1)}""")