在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相同,但是

    • 返回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