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