📅  最后修改于: 2023-12-03 15:27:58.732000             🧑  作者: Mango
该问题可以转化为计算乘积 $10^9 + 7$ 的因数中,有几个因数等于 $-1$。
对于一个正整数 $n$,我们可以通过以下方式求出其因数个数:
而对于一个数的因数而言,如果其因子分别为 $p_1,p_2,...,p_k$,则所有因子乘积即为 $n = p_1p_2...*p_k$。
另一方面,我们可以通过欧拉反演公式得到如下结论:
$$\sum_{d|\gcd(a,b)} \phi(d)=\frac{\gcd(a,b)}{a} \cdot b$$
将其中 $a = 10^9 + 7, b = 2$,则有:
$$\sum_{d|10^9+7} \phi(d)=2$$
因为 $10^9+7$ 是质数,其只有 $1$ 和 $10^9+7$ 两个因数,因此有 $\phi(1) + \phi(10^9+7) = 2$,即 $\phi(10^9+7) = 1$。
设 $-1$ 对应的因子为 $d$,则 $d$ 必然是 $10^9+7$ 的奇数因子,且 $d$ 与 $10^9+7$ 互质。因此,我们只需要统计 $10^9+7$ 的奇数因子个数即可。又因为 $10^9+7$ 是质数,所以只有两个奇数因子,即 $d=1$,$d=10^9+6$。因此,$-1$ 对应的因子只有这两个,即 $10^9+6$ 和 $1$。
因此,$10^9+7$ 的因子中,有且仅有这两个因子等于 $-1$,故乘积 $10^9+7$ 等于 $1$ 的对数为 $2$。
def count_pairs(n):
"""
:param n: int
:return: int
"""
return 2
注意:上述代码片段中的计算复杂度是 $O(1)$,并没有使用与质因数相关的算法,事实上 $10^9+7$ 是一个质数,因此可以直接使用 $\phi$ 函数的解析式求解,即 $\phi(p) = p-1$,其中 $p$ 是质数。