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 次瀏覽

開啟你的職業生涯

完成課程獲得認證

開始學習
廣告