파이썬으로 하샤드 수를 체크하는 방법입니다.
어떤 자연수 n의 각 자릿수들을 모두 더한 값이 m이라고 했을 때, n이 m으로 나누어 떨어진다면 그 수는 하샤드 수입니다. 예를 들어, n이 12라고 하면 12의 각 자릿수를 모두 더한 값(1+2)인 m은 3이고, 12는 3으로 나누어 떨어지므로, 12는 하샤드 수입니다.
같은 수라도 진법에 따라 하샤드 수일 수도 있고 아닐 수도 있습니다. 예를 들어, 12는 10진법으로 하면 하샤드 수이지만, 8진법으로 하면 0o14가 되고 1+4는 5, 5는 12의 약수가 아니므로 하샤드 수가 아니게 됩니다. 참고로 1, 2, 4, 6은 어느 진법에서든 항상 하샤드 수가 됩니다.
코드는 아래와 같습니다. 여기서는 10진법 기준으로 체크합니다.
def is_harshad_number(n): """ 하샤드 수 체크 함수 인수: n: 체크할 정수. 반환: 하샤드 수이면 True, 아니면 False """ if n <= 0: # 하샤드 수는 양수만 유효 return False original_n = n sum_of_digits = 0 while n > 0: sum_of_digits += n % 10 # 끝자리를 더함 n //= 10 # 끝자리 제거 if sum_of_digits == 0: # 0이면 거짓을 반환 return False return original_n % sum_of_digits == 0 # 예제: print(is_harshad_number(18)) # 출력: True (1+8=9, 18 % 9 == 0) print(is_harshad_number(15)) # 출력: False (1+5=6, 15 % 6 != 0) print(is_harshad_number(21)) # 출력: True (2+1=3, 21 % 3 == 0) print(is_harshad_number(0)) # 출력: False
이 코드의 실행 결과는 다음과 같습니다.
True False True False