假设我们有一个数字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相同,但是
返回False
n:= n / 2
p:= p + 1
p:= 0
而n mod 2与0相同,则
如果p与1相同,则
p:=(n的平方根)的整数+ 1
对于3到p范围内的因子,增加2
返回False
n:= n /因子
p:= p + 1
p:= 0
当n mod因子等于0时,
如果p与1相同,则
当(n等于1)时返回true
定义一个函数check_power()。这将需要
如果a与1相同,则
返回True
p:=(n的平方根)的整数+ 1
对于范围2到a中的i,增加1
返回True
val:= log(a)/ log(i)[所有基本e]
如果(val-(val)的整数部分)<0.00000001,则
返回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