📌  相关文章
📜  计算乘积10 ^ 9 + 7等于1的对(1)

📅  最后修改于: 2023-12-03 15:27:58.732000             🧑  作者: Mango

计算乘积 $10^9 + 7$ 等于1的对

该问题可以转化为计算乘积 $10^9 + 7$ 的因数中,有几个因数等于 $-1$。

对于一个正整数 $n$,我们可以通过以下方式求出其因数个数:

  1. 将 $n$ 进行质因数分解,得到其因数中所有质因子的指数
  2. 将所有指数加一并相乘,即得到 $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$ 是质数。