在 Python 中检查给定数字是否为 Ore 数
假设我们有一个数字 n。我们需要检查 n 是否为 Ore 数。众所周知,Ore 数是一个其约数具有整数调和值的数字。
因此,如果输入类似于 28,则输出将为 True,因为 28 有六个约数:[1, 2, 4, 7, 14, 28],所以
由于 3 是整数,所以 28 是 Ore 数。
为了解决这个问题,我们将遵循以下步骤 -
- 定义一个函数 get_all_div()。这将接受 n
- div := 一个新的列表
- 对于 i 从 1 到 n 的平方根的整数部分,执行以下操作
- 如果 n 可以被 i 整除,则
- 如果 (n / i) 的商为 i,则
- 将 i 插入到 div 的末尾
- 否则,
- 将 i 插入到 div 的末尾
- 将 (n / i) 的商插入到 div 的末尾
- 如果 (n / i) 的商为 i,则
- 如果 n 可以被 i 整除,则
- 返回 div
- 定义一个函数 get_harmonic_mean()。这将接受 n
- div := get_all_div(n)
- total := 0
- length := div 的大小
- 对于 i 从 0 到 length - 1,执行以下操作
- total := total + (n / div[i])
- total := total / n
- 返回 length / total
- 从主方法执行以下操作
- mean := get_harmonic_mean(n)
- 如果 mean 是整数,则
- 返回 True
- 返回 False
让我们看看以下实现以更好地理解 -
示例代码
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
广告