Computer >> Máy Tính >  >> Lập trình >> Python

Kiểm tra xem một số có phải là số Achilles hay không trong Python

Giả sử chúng ta có một số n; chúng ta phải kiểm tra xem n có phải là số Achilles hay không. Như chúng ta biết một số là số Achilles khi một số là lũy thừa (Số N được gọi là Số mạnh khi với mọi thừa số nguyên tố p của nó, p ^ 2 cũng chia hết) nhưng không phải là lũy thừa hoàn hảo. Một số ví dụ về số Achilles là:72, 108, 200, 288, 392, 432, 500, 648, 675, 800, 864, 968, 972, 1125.

Vì vậy, nếu đầu vào là 108, thì đầu ra sẽ là Đúng, vì 6 và 36 đều chia nó và nó không phải là hình vuông hoàn hảo.

Để giải quyết vấn đề này, chúng tôi sẽ làm theo các bước sau -

  • Xác định một hàm check_powerful (). Điều này sẽ mất n
  • trong khi n mod 2 giống nhau, hãy thực hiện
    • p:=0
    • trong khi n mod 2 giống 0, hãy thực hiện
      • n:=n / 2
      • p:=p + 1
    • nếu p giống 1, thì
      • trả về Sai
  • p:=số nguyên của (căn bậc hai của n) + 1
  • đối với hệ số trong phạm vi 3 đến p, tăng 2, thực hiện
    • p:=0
    • trong khi hệ số n mod giống 0, do
      • n:=n / hệ số
      • p:=p + 1
    • nếu p giống 1, thì
      • trả về Sai
  • trả về true khi (n giống với 1)
  • Xác định một hàm check_power (). Điều này sẽ mất một
  • nếu a giống 1, thì
    • trả về True
  • p:=số nguyên của (căn bậc hai của n) + 1
  • đối với tôi trong phạm vi từ 2 đến a, tăng thêm 1, thực hiện
    • val:=log (a) / log (i) [tất cả cơ số e]
    • nếu (val - phần nguyên của (val)) <0,00000001, thì
      • trả về True
  • trả về Sai
  • Từ phương pháp chính, hãy thực hiện như sau -
  • nếu check_powerful (n) giống True và check_power (n) giống False, thì
    • trả về True
  • nếu không,
    • trả về Sai

Ví dụ

Hãy cùng chúng tôi xem cách triển khai sau để hiểu rõ hơn -

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))

Đầu vào

108

Đầu ra

True