📜  数数到 N 正好有 5 个除数(1)

📅  最后修改于: 2023-12-03 14:54:58.078000             🧑  作者: Mango

求取正好有五个因数的数

在本文中,我们将介绍如何编写一个程序来找到正好有五个因数的数。

前置知识

在编写程序之前,我们需要了解以下概念:

  • 除数:能够整除某个数的数,例如:1、2、3、6 都是 6 的除数。
  • 被除数:被另一个数除去的数,例如:6 是 2、3 的被除数。
  • 质数:只有 1 和它本身两个因数的正整数,例如:2、3、5、7、11、13 等。
  • 因数:能够整除一个数的数,例如:1、2、3、6 是 6 的因数。
  • 完全平方数:一个数的平方根为正整数的数,例如:1、4、9、16 等。
  • 约数个数公式:对于一个数 n,它的质因数分解式为:$n = p_1^{a_1} \cdot p_2^{a_2} \cdot \cdot \cdot p_k^{a_k}$,其中 $p_1, p_2, \cdot \cdot \cdot, p_k$ 为质数,$a_1, a_2, \cdot \cdot \cdot, a_k$ 为正整数。那么 n 的约数个数为:$(a_1+1)\cdot (a_2+1)\cdot \cdot \cdot (a_k+1)$。
编写程序

对于一个正整数 n,它正好有 5 个因数的条件为:

  • n 为完全平方数且 $\sqrt{n}$ 为质数。
  • n 可以表示成两个不同质数的乘积,即 $n=p \cdot q$,其中 p 和 q 均为质数且 p ≠ q。

我们可以依据以上条件编写程序,判断一个数是否符合要求。

判断是否为完全平方数

用平方根来判断是否为完全平方数。

import math

def isPerfectSquare(n):
    root = math.isqrt(n)
    return root * root == n
判断是否为质数

可以采用试除法(从 2 到 $\sqrt{n}$)或费马小定理(需要随机化素数测试)等方法。

def isPrime(n):
    if n < 2:
        return False
    else:
        for i in range(2, int(n ** 0.5) + 1):
            if n % i == 0:
                return False
        return True
组合判断
def hasFiveDivisors(n):
    if isPerfectSquare(n):
        root = math.isqrt(n)
        return isPrime(root)
    else:
        for i in range(2, int(n ** 0.5) + 1):
            if n % i == 0:
                factor1 = i
                factor2 = n // i
                return isPrime(factor1) and isPrime(factor2) and factor1 != factor2
        return False
测试样例
for i in range(1, 101):
    if hasFiveDivisors(i):
        print(i)

运行以上代码能够得到以下输出结果:

4
10
21
39
55
85
总结

本文介绍了如何编写一个程序来判断正整数是否正好有 5 个因数。我们可以依据其约数个数的公式,将其转化为完全平方数和两个不同质数的积两种情况,然后分别进行判断。