Project Euler 754
Project Euler 754
题目
Product of Gauss Factorials
The Gauss Factorial of a number \(n\) is defined as the product of all positive numbers \(\leq n\) that are relatively prime to \(n\). For example \(g(10)=1\times 3\times 7\times 9 = 189\). Also we define \[\displaystyle G(n) = \prod_{i=1}^{n}g(i)\] You are given \(G(10) = 23044331520000\).
Find \(G(10^8)\). Give your answer modulo \(1\,000\,000\,007\).
解决方案
令函数\(f(N,n)\)表示在\(n< i\le N\)这些数中,有多少个\(i\)满足\(\gcd(n,i)=1.\)那么\(G(N)\)就可以写成:
\[G(N)=\prod_{n=2}^N n^{f(N,n)}\]
其中,通过容斥原理和莫比乌斯函数\(\mu\)的性质,不难写出
\[f(N,n)=\sum_{d\mid n}\mu(d)\left(\left\lfloor\dfrac{N}{d}\right\rfloor-\left\lfloor\dfrac{n}{d}\right\rfloor\right)\]
注意式子后面第二项是减去\(n\)以内的数。
最终直接进行计算即可,时间复杂度为\(O(N\log N)\)。
代码
本代码运行超过\(1\)分钟(约\(70\)秒),我暂时没有比较好的思路来优化这道题。
1 |
|