在 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 的末尾
  • 返回 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

更新于: 2021年1月15日

247 次查看

开启您的 职业生涯

通过完成课程获得认证

开始学习
广告