Một số được gọi là số Ore nếu trung bình điều hòa (harmonic mean) của các ước số của nó là một số nguyên.
Ví dụ: 28 có ước số [1,2,4,7,14,28]. Trung bình điều hòa = 6 / (1/1+1/2+1/4+1/7+1/14+1/28) = 3 → nguyên → 28 là số Ore.
Giải thuật
- Tìm tất cả ước số của
n. - Tính trung bình điều hòa:
H = số_ước / tổng( n / ước ). - Nếu
Hlà số nguyên →True.
Mã ví dụ
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(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))
Đầu vào
28
Đầu ra
True