📜  给定数字的平方自由除数的计数(1)

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

给定数字的平方自由除数的计数

**介绍:**本文将介绍如何编写一个程序来计算一个给定数字的平方自由除数的数量。一个数字的平方自由除数是该数字除平方数外没有其他因子的数。

**算法:**该算法基于质因数分解的原则。通过对所给数字进行质因数分解,找到所有可重复使用的质数因子。然后将每个因子的幂进行加1相乘,得到自由除数的数量。最后减去平方数的数量即为结果。

以下为具体步骤的代码实现:

def count_sq_free_divisors(n):

    def prime_factors(n):
        i = 2
        factors = []
        while i * i <= n:
            if n % i:
                i += 1
            else:
                n //= i
                factors.append(i)
        if n > 1:
            factors.append(n)
        return factors
    
    factors = prime_factors(n)
    p_set = set(factors)
    count = 1
    for p in p_set:
        if p == 2:
            count *= factors.count(2) + 1
        elif factors.count(p) == 1:
            count *= 2
        else:
            count *= factors.count(p) + 1
    count -= int(n ** 0.5) ** 2
    
    return count

**输入:**该程序接受一个正整数 n 作为输入,表示需要计算的数。

**输出:**该程序输出所给数字的平方自由除数的数量。

示例:

输入:18

输出:3

解释:18 的平方自由除数为 1、3、6。

**参考文献:**本文算法参考自 https://www.geeksforgeeks.org/count-square-free-divisors-of-a-given-number/