숫자 n이 있다고 가정합니다. n이 광석 수인지 아닌지 확인해야 합니다. 우리가 알고 있듯이 광석 수는 제수가 정수 조화 값을 갖는 수입니다.
따라서 입력이 28과 같으면 28의 제수가 6개 있으므로 출력은 True가 됩니다. [1, 2, 4, 7, 14, 28], so
3은 정수이므로 28은 광석 수입니다.
이 문제를 해결하기 위해 다음 단계를 따릅니다. −
- get_all_div() 함수를 정의합니다. n 소요됩니다.
- div :=새 목록
- (n의 제곱근) 범위 1에서 정수 부분까지의 i에 대해
- n이 i로 나누어 떨어지면
- (n / i)의 몫이 i이면
- div 끝에 i 삽입
- 그렇지 않으면
- div 끝에 i 삽입
- div 끝에 (n / i)의 몫 삽입
- (n / i)의 몫이 i이면
- n이 i로 나누어 떨어지면
- div 반환
- get_harmonic_mean() 함수를 정의합니다. n 소요됩니다.
- div :=get_all_div(n)
- 총계:=0
- 길이 :=div의 크기
- 0에서 길이 - 1까지의 범위에 있는 i에 대해
- 총계 :=총계 + (n / div[i])
- 총계 :=총계 / n
- 반환 길이/총계
- 기본 방법에서 다음을 수행합니다.
- 평균:=get_harmonic_mean(n)
- 평균이 정수이면
- 참 반환
- 거짓을 반환
이해를 돕기 위해 다음 구현을 살펴보겠습니다. −
예시 코드
def get_all_div(n): div = [] for i in range(1, int(n**(0.5)) + 1): if n % i == 0: if n // i == i: div.append(i) else: div.append(i) div.append(n // i) return div def get_harmonic_mean(n): div = get_all_div(n) total = 0 length = len(div) for i in range(0, length): total += (n / div[i]) total /= n return length / total def solve(n): mean = get_harmonic_mean(n) if mean - int(mean) == 0: return True return False n = 28 print(solve(n))
입력
28
출력
True