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
广告
数据结构
网络
关系数据库管理系统 (RDBMS)
操作系统
Java
iOS
HTML
CSS
Android
Python
C语言编程
C++
C#
MongoDB
MySQL
Javascript
PHP