Project Euler 447
Project Euler 447
题目
Retractions C
For every integer \(n>1\), the family of functions \(f_{n,a,b}\) is defined by
\(f_{n,a,b}(x)\equiv a x + b \bmod n\) for \(a,b,x\) integer and \(0< a <n, 0 \le b < n,0 \le x < n\).
We will call \(f_{n,a,b}\) a retraction if \(f_{n,a,b}(f_{n,a,b}(x)) \equiv f_{n,a,b}(x) \bmod n\) for every \(0 \le x < n\).
Let \(R(n)\) be the number of retractions for \(n\).
\(\displaystyle F(N)=\sum_{n=2}^N R(n)\).
\(F(10^7)\equiv 638042271 \bmod 1\,000\,000\,007\).
Find \(F(10^{14})\).
Give your answer modulo \(1\,000\,000\,007\).
解决方案
第445题直接给出了如下关于\(R(n)\)的式子,将\(n\)写成质因数分解的形式\(n=\prod_{i=1}^k p_i^{e_i}\)。那么有:
\[R(n)=\prod_{i=1}^k(p_i^{e_i}+1)-n\]
定义\(\displaystyle{U(n)=\prod_{i=1}^k(1+p_i^{e_i}).}\)则\(R(n)=U(n)-n.\)因此
\[ F(N)=\sum_{n=2}^N (U(n)-n)=\left(\sum_{n=1}^N U(n)\right)-\frac{N(N+1)}{2}, \]
因为 \(U(1)=1\) 且 \(\displaystyle{\sum_{n=2}^N n=\dfrac{N(N+1)}{2}-1}\),两边的 \(-1\) 抵消。于是核心变成计算\(U(n)\)。
注意 \(U(n)\) 也是单位因子的和:\(\displaystyle{U(n)=\sum_{\substack{d\mid n\\\gcd(d,n/d)=1}} d.}\)
用指示函数写为\(\displaystyle{U(n)=\sum_{d\mid n} d\cdot [\gcd(d,n/d)=1].}\)利用经典恒等式 \(\displaystyle{\mathbb{1}\{\gcd(x,y)=1\}=\sum_{k\mid \gcd(x,y)} \mu(k),}\) 其中 \(\mu\) 为 Möbius 函数。令 \(x=d,y=n/d\),构造Möbius反演,得到\(\displaystyle{U(n)=\sum_{d\mid n} d \sum_{k\mid \gcd(d,n/d)} \mu(k).}\)
把满足 \(k\mid d\) 且 \(k\mid n/d\) 的 \(k\) 提取出来:设 \(d=k t\),则 \(n/d = n/(kt)\) 也需被 \(k\) 整除,等价于 \(k^2\mid n\)。写 \(n=k^2 m\),则 \(t\mid m\)。代入上式:
\[ U(n)=\sum_{k^2\mid n}\mu(k)\sum_{t\mid n/k^2} (kt) =\sum_{k^2\mid n}\mu(k)k\sum_{t\mid n/k^2} t =\sum_{k^2\mid n}\mu(k)k\sigma\left(\frac{n}{k^2}\right), \]
其中 \(\displaystyle{\sigma(m)=\sum_{d\mid m} d}\) 是约数和函数。
令 \[ S(X)=\sum_{m=1}^X\sigma(m). \] 则 \[ \begin{aligned} U(N)&=\sum_{n\le N}\sum_{k^2\mid n}\mu(k)k\sigma(n/k^2) \\ &=\sum_{k\le \sqrt N}\mu(k)k\sum_{m\le N/k^2}\sigma(m) \\ &=\sum_{k\le \sqrt N}\mu(k)kS\left(\left\lfloor\frac{N}{k^2}\right\rfloor\right). \end{aligned} \]
因此,\(S(X)\)可以通过数论分块求解。由\(\displaystyle{\sigma(m)=\sum_{d\mid m} d,}\)可交换求和得到\(\displaystyle{S(X)=\sum_{m\le X}\sum_{d\mid m} d=\sum_{d\le X} d\left\lfloor\frac{X}{d}\right\rfloor.}\)
用整除分块:当 \(v=\left\lfloor X/i\right\rfloor\) 固定时,\(i\) 落在区间\(i\in\left[L,R\right],L=i,R=\left\lfloor\dfrac{X}{v}\right\rfloor.\)
区间内 \(\left\lfloor X/t\right\rfloor=v\) 恒定,因此\(\displaystyle{\sum_{t=L}^{R} t\left\lfloor\frac{X}{t}\right\rfloor= v\sum_{t=L}^{R} t= v\cdot \frac{(L+R)(R-L+1)}{2}.}\)
为了避免计算\(\mu\),我们构建一个递推式。设\(q=\left\lfloor\sqrt N\right\rfloor,A(d)=S\left(\left\lfloor\dfrac{N}{d^2}\right\rfloor\right).\)
定义新函数
\[g_q(d)=\sum_{k=1}^{\lfloor q/d\rfloor} \mu(k)kA(kd).\]
显然目标就是\(U(N)=g_q(1).\)接下来证明一个关键恒等式:
\[ \begin{aligned} \sum_{k=1}^{\lfloor q/d\rfloor} kg_q(kd) &=\sum_{k} k \sum_{t} \mu(t)tA(tkd) \\ &=\sum_{m} A(md)\sum_{t\mid m} \mu(t)t\cdot \frac{m}{t} \\ &=\sum_{m} A(md)m \sum_{t\mid m}\mu(t). \end{aligned} \]
而可见,
\[ \sum_{t\mid m}\mu(t)= \begin{cases} 1,& m=1,\\ 0,& m>1, \end{cases} \]
所以只剩 \(m=1\) 项:\(\displaystyle{\sum_{k} kg_q(kd)=A(d).}\)因此得到了反演形式的递推:
\[ g_q(d)= \left \{\begin{aligned} &A(d) & & \text{if}\quad 2d>q\\ &A(d)-\sum_{k=2}^{\left\lfloor q/d\right\rfloor} k\cdot g_q(kd) & & \text{if}\quad 2d\le q \end{aligned}\right. \]
因此,按 \(d=q,q-1,\dots,1\) 递减计算。因为右侧用到的都是 \(kd>d\),已在更大的 \(d\) 处算出。
最后计算 \[ F(N) = g(1)-\frac{N(N+1)}{2}. \]
代码
1 |
|