lowercase_  							=			(1, 1_53, 3_70, 3_71, 16_34, 24_67_80_51, 1_15_13_22_19_01_87_63_99_25_65_09_55_97_97_39_71_52_24_01)
lowercase_  							=			(-1_53, -1, 0, 1.2, 2_00, "A", [], {}, None)







def 					__lowerCAmelCase				(		__SCREAMING_SNAKE_CASE       :					int   ):







    '''simple docstring'''
    if not isinstance(__SCREAMING_SNAKE_CASE		,							__SCREAMING_SNAKE_CASE   ) or n < 1:
        return False

    # Initialization of sum and number of digits.
    __snake_case       :				Any 			=    0
    __snake_case       :				Optional[int] 			=    0
    __snake_case       :				str 			=    n
    # Calculation of digits of the number
    while temp > 0:
        number_of_digits += 1
        temp //= 1_0
    # Dividing number into separate digits and find Armstrong number
    __snake_case       :				Optional[Any] 			=    n
    while temp > 0:
        __snake_case       :				Dict 			=    temp % 1_0
        total += rem**number_of_digits
        temp //= 1_0
    return n == total







def 					__lowerCAmelCase				(		__SCREAMING_SNAKE_CASE       :					int   ):







    '''simple docstring'''
    if not isinstance(__SCREAMING_SNAKE_CASE		,							__SCREAMING_SNAKE_CASE   ) or n < 1:
        return False

    # Init a "histogram" of the digits
    __snake_case       :				Any 			=    [0, 0, 0, 0, 0, 0, 0, 0, 0, 0]
    __snake_case       :				Any 			=    0
    __snake_case       :				Optional[int] 			=    0
    __snake_case       :				Any 			=    n
    while temp > 0:
        __snake_case			, __snake_case       :				int 			=    divmod(__SCREAMING_SNAKE_CASE		,							1_0   )
        digit_histogram[rem] += 1
        digit_total += 1

    for cnt, i in zip(__SCREAMING_SNAKE_CASE		,							range(len(__SCREAMING_SNAKE_CASE   )   )   ):
        total += cnt * i**digit_total

    return n == total







def 					__lowerCAmelCase				(		__SCREAMING_SNAKE_CASE       :					int   ):







    '''simple docstring'''
    if not isinstance(__SCREAMING_SNAKE_CASE		,							__SCREAMING_SNAKE_CASE   ) or n < 1:
        return False
    __snake_case       :				int 			=    len(str(__SCREAMING_SNAKE_CASE   )   )  # the power that all digits will be raised to
    # check if sum of each digit multiplied expo times is equal to number
    return n == sum(int(__SCREAMING_SNAKE_CASE   ) ** expo for i in str(__SCREAMING_SNAKE_CASE   )   )







def 					__lowerCAmelCase				(		):







    '''simple docstring'''
    __snake_case       :				Optional[int] 			=    int(input("""Enter an integer to see if it is an Armstrong number: """   ).strip()   )
    print(F'''{num} is {'' if armstrong_number(__SCREAMING_SNAKE_CASE   ) else 'not '}an Armstrong number.'''   )
    print(F'''{num} is {'' if narcissistic_number(__SCREAMING_SNAKE_CASE   ) else 'not '}an Armstrong number.'''   )
    print(F'''{num} is {'' if pluperfect_number(__SCREAMING_SNAKE_CASE   ) else 'not '}an Armstrong number.'''   )


if __name__ == "__main__":
     import doctest

     doctest.testmod()
     main()




import math
from timeit import timeit







def 					__lowerCAmelCase				(		__SCREAMING_SNAKE_CASE       :					int   ):







    '''simple docstring'''
    __snake_case       :				Optional[Any] 			=    0
    __snake_case       :				Union[str, Any] 			=    abs(__SCREAMING_SNAKE_CASE   )
    while True:
        __snake_case       :				List[str] 			=    n // 1_0
        digits += 1
        if n == 0:
            break
    return digits







def 					__lowerCAmelCase				(		__SCREAMING_SNAKE_CASE       :					int   ):







    '''simple docstring'''
    return 1 if n == 0 else math.floor(math.log(abs(__SCREAMING_SNAKE_CASE   )		,							1_0   ) + 1   )







def 					__lowerCAmelCase				(		__SCREAMING_SNAKE_CASE       :					int   ):







    '''simple docstring'''
    return len(str(abs(__SCREAMING_SNAKE_CASE   )   )   )







def 					__lowerCAmelCase				(		):







    '''simple docstring'''
    from collections.abc import Callable

    def benchmark_a_function(__SCREAMING_SNAKE_CASE       :					Callable		,							__SCREAMING_SNAKE_CASE       :					int   ) -> None:
        __snake_case       :				Tuple 			=    F'''{func.__name__}({value})'''
        __snake_case       :				Union[str, Any] 			=    timeit(F'''__main__.{call}'''		,							setup="""import __main__"""   )
        print(F'''{call}: {func(__SCREAMING_SNAKE_CASE   )} -- {timing} seconds'''   )

    for value in (2_6_2_1_4_4, 1_1_2_5_8_9_9_9_0_6_8_4_2_6_2_4, 1_2_6_7_6_5_0_6_0_0_2_2_8_2_2_9_4_0_1_4_9_6_7_0_3_2_0_5_3_7_6):
        for func in (num_digits, num_digits_fast, num_digits_faster):
            benchmark_a_function(__SCREAMING_SNAKE_CASE		,							__SCREAMING_SNAKE_CASE   )
        print()


if __name__ == "__main__":
     import doctest

     doctest.testmod()
     benchmark()



