检查数字是否是Python中的特洛伊木马数字

假设我们有一个数字n,我们必须检查n是否是Trojan Number。众所周知,特洛伊木马号是一个没有完善的幂的强数。当对于每个主除数或n的因子p,p ^ 2也是一个约数时,数字n是一个强数。换句话说,每个素因数至少出现两次。特洛伊木马数字很强。但是事实并非如此。因此,这意味着并非所有强数都是特洛伊木马数字:只有那些不能表示为a ^ b的数字。

因此,如果输入类似于72,则输出将为True,因为72可以表示为(6 * 6 * 2)=(6 ^ 2 * 2)。强数,但没有完美的力量。

为了解决这个问题,我们将遵循以下步骤-

  • 定义一个函数check_perfect_pow()。这将花费n

  • 如果n与1相同,则

    • 返回True

  • 对于范围2到(n的平方根)+ 1的整数部分的x,执行

    • 如果p与n相同,则

    • y:= y + 1

    • p = x ^ y

    • 返回True

    • y:= 2

    • p = x ^ y

    • 当p <= n并且p> 0时,

    • 返回False

    • 定义一个函数check_span_num()。这将花费n

    • count:=一个保存数字频率的映射,最初都是0

    • 而n mod 2与0相同,则

      • n:= n / 2(整数除法)

      • count [2]:= count [2] +1

    • 对于范围在3到(n的平方根)+ 1的整数部分的i,增加2,

      • n:= n / i(整数除法)

      • count [i]:= count [i] + 1

      • 当n mod我等于0时,

    • 如果n> 2为非零,则

      • count [n]:= count [n] + 1

    • 标志:= 0

    • 对于每个键,items()计数值,执行

      • 标志:= 1

      • 打破

      • 如果值等于1,则

    • 如果标志与1相同,则

      • 返回False

    • 返回True

    • 从主要方法中执行以下操作-

      • 当check_perfect_pow(n)为False并且check_span_num(n)为true时返回true,否则返回false

    示例

    让我们看下面的实现以更好地理解-

    from math import sqrt, pow

    def check_perfect_pow(n):

       if n == 1:

          return True

       for x in range(2, int(sqrt(n)) + 1):

          y = 2

          p = x**y

          while p <= n and p > 0:

             if p == n:

                return True

             y += 1

             p = x**y

       return False

    def check_span_num(n):

       count = {i:0 for i in range(n)}

       while n % 2 == 0:

          n = n // 2

          count[2] += 1

       for i in range(3,int(sqrt(n)) + 1, 2):

          while n % i == 0:

             n = n // i

             count[i] += 1

       if n > 2:

          count[n] += 1

       flag = 0

       for key,value in count.items():

          if value == 1:

             flag = 1

             break

       if flag == 1:

          return False

       return True

    def isTrojan(n):

       return check_perfect_pow(n) == False and check_span_num(n)

    n = 72

    print(isTrojan(n))

    输入值

    72

    输出结果

    True

    以上是 检查数字是否是Python中的特洛伊木马数字 的全部内容, 来源链接: utcz.com/z/331064.html

    回到顶部