Python 判断一个数是否为阿基里斯数


假设我们有一个数字 n;我们需要检查 n 是否为阿基里斯数。我们知道,如果一个数是强大的(如果一个数 N 的每一个质因数 p,p^2 也能整除它,则称 N 为强大的数),但不是完全幂,则该数为阿基里斯数。一些阿基里斯数的例子是:72, 108, 200, 288, 392, 432, 500, 648, 675, 800, 864, 968, 972, 1125。

因此,如果输入为 108,则输出为 True,因为 6 和 36 都能整除它,并且它不是完全平方数。

为了解决这个问题,我们将遵循以下步骤:

  • 定义一个函数 `check_powerful()`。它将接收 n 作为参数。
  • 当 n mod 2 相等时,执行以下操作:
    • p := 0
    • 当 n mod 2 等于 0 时,执行以下操作:
      • n := n / 2
      • p := p + 1
    • 如果 p 等于 1,则
      • 返回 False
  • p := int(sqrt(n)) + 1
  • 对于 factor 从 3 到 p,步长为 2,执行以下操作:
    • p := 0
    • 当 n mod factor 等于 0 时,执行以下操作:
      • n := n / factor
      • p := p + 1
    • 如果 p 等于 1,则
      • 返回 False
  • 当 (n 等于 1) 时返回 true
  • 定义一个函数 `check_power()`。它将接收 a 作为参数。
  • 如果 a 等于 1,则
    • 返回 True
  • p := int(sqrt(n)) + 1
  • 对于 i 从 2 到 a,步长为 1,执行以下操作:
    • val := log(a) / log(i) [所有对数以 e 为底]
    • 如果 (val - int(val)) < 0.00000001,则
      • 返回 True
  • 返回 False
  • 在主方法中,执行以下操作:
  • 如果 `check_powerful(n)` 等于 True 且 `check_power(n)` 等于 False,则
    • 返回 True
  • 否则,
    • 返回 False

示例

让我们看看下面的实现来更好地理解:

 在线演示

from math import sqrt, log
def check_powerful(n):
   while (n % 2 == 0):
      p = 0
      while (n % 2 == 0):
         n /= 2
         p += 1
      if (p == 1):
         return False  
   p = int(sqrt(n)) + 1
   for factor in range(3, p, 2):
      p = 0
      while (n % factor == 0):
         n = n / factor
         p += 1
      if (p == 1):
         return False
   return (n == 1)
def check_power(a):
   if (a == 1):
      return True
   p = int(sqrt(a)) + 1
   for i in range(2, a, 1):
      val = log(a) / log(i)
      if ((val - int(val)) < 0.00000001):
         return True
   return False
def isAchilles(n):
   if (check_powerful(n) == True and check_power(n) == False):
      return True
   else:
      return False
n = 108
print(isAchilles(n))

输入

108

输出

True

更新于:2020年8月27日

193 次浏览

开启你的职业生涯

完成课程获得认证

开始学习
广告
© . All rights reserved.