tsy’s number
推式子
∑i=1n∑j=1n∑k=1nϕ(i)ϕ(j2)ϕ(k3)ϕ(i)ϕ(j)ϕ(k)ϕ(gcd(i,j,k))我们假定j=p1k1p2k2p3p3……pnkn,有ϕ(j)=p1k1−1(p1−1)p2k2−1(p2−1)p3k3−1(p3−1)……pnkn−1(pn−1),ϕ(j2)=p12k1−1(p1−1)p22k2−1(p2−1)p32k3−1(p3−1)……pn2kn−1(pn−1)ϕ(j2)ϕ(j)=p1k1p2k2p3p3……pnkn=j同样的,我们不难推出ϕ(k3)ϕ(k)=k2对上式化简:=∑i=1n∑j=1n∑k=1njk2ϕ(gcd(i,j,k))=∑d=1n∑i=1n∑j=1n∑k=1njk2ϕ(d)(gcd(i,j,k)=d)=∑d=1nd3ϕ(d)∑i=1nd∑j=1nd∑k=1ndjk2(gcd(i,j,k)=1)=∑d=1nd3ϕ(d)∑t=1ndμ(t)t3∑i=1ndt∑j=1ndt∑k=1ndtjk2设f(n)=∑i=1n∑j=1n∑k=1njk2,T=dt,再次对上式化简:=∑T=1nf(nT)T3∑d∣Tϕ(d)μ(Td)我们假设g(n)=n3∑d∣nϕ(d)μ(nd)\sum_{i = 1} ^{n} \sum_{j = 1} ^{n} \sum_{k = 1} ^{n} \frac{\phi(i) \phi(j ^ 2) \phi(k ^ 3)}{ \phi(i) \phi(j) \phi(k)}\phi(gcd(i, j, k))\\ 我们假定j = p_1 ^{k_1}p_2^{k_2}p_3 ^{p_3} ……p_n ^{k_n},有\phi(j) = p_1^{k_1 - 1}(p_1 - 1)p_2 ^{k_2 - 1}(p_2 - 1)p_3^{k_3 - 1}(p_3 - 1) …… p_n ^{k_n - 1}(p_n - 1),\\ \phi(j ^ 2) = p_1^{2k_1 - 1}(p_1 - 1)p_2 ^{2k_2 - 1}(p_2 - 1)p_3^{2k_3 - 1}(p_3 - 1) …… p_n ^{2k_n - 1}(p_n - 1)\\ \frac{\phi(j ^ 2)}{\phi(j)} = p_1 ^{k_1}p_2^{k_2}p_3 ^{p_3} ……p_n ^{k_n} = j\\ 同样的,我们不难推出\frac{\phi(k ^ 3)}{\phi(k)} = k ^ 2\\ 对上式化简:\\ = \sum_{i = 1} ^{n} \sum_{j = 1} ^{n} \sum_{k = 1} ^{n} jk ^ 2 \phi(gcd(i, j, k))\\ = \sum_{d = 1} ^{n} \sum_{i = 1} ^{n} \sum_{j = 1} ^{n} \sum_{k = 1} ^{n} jk ^ 2 \phi(d)(gcd(i, j, k) = d)\\ = \sum_{d = 1} ^{n} d ^ 3 \phi(d) \sum_{i = 1} ^{\frac{n}{d}} \sum_{j = 1} ^{\frac{n}{d}} \sum_{k = 1} ^{\frac{n}{d}}jk ^ 2 (gcd(i, j, k) = 1)\\ = \sum_{d = 1} ^{n} d ^ 3 \phi(d) \sum_{t = 1} ^{\frac{n}{d}} \mu(t) t ^ 3 \sum_{i = 1} ^{\frac{n}{dt}} \sum_{j = 1} ^{\frac{n}{dt}} \sum_{k = 1} ^{\frac{n}{dt}}j k ^ 2\\ 设f(n) = \sum \limits _{i = 1} ^{n} \sum\limits_{j = 1} ^{n} \sum\limits_{k = 1} ^{n} j k ^ 2,T = dt,再次对上式化简:\\ = \sum_{T = 1} ^{n} f(\frac{n}{T}) T ^ 3 \sum_{d \mid T} \phi(d) \mu(\frac{T}{d})\\ 我们假设g(n) = n ^ 3 \sum_{d \mid n} \phi(d) \mu(\frac{n}{d})\\ i=1∑nj=1∑nk=1∑nϕ(i)ϕ(j)ϕ(k)ϕ(i)ϕ(j2)ϕ(k3)ϕ(gcd(i,j,k))我们假定j=p1k1p2k2p3p3……pnkn,有ϕ(j)=p1k1−1(p1−1)p2k2−1(p2−1)p3k3−1(p3−1)……pnkn−1(pn−1),ϕ(j2)=p12k1−1(p1−1)p22k2−1(p2−1)p32k3−1(p3−1)……pn2kn−1(pn−1)ϕ(j)ϕ(j2)=p1k1p2k2p3p3……pnkn=j同样的,我们不难推出ϕ(k)ϕ(k3)=k2对上式化简:=i=1∑nj=1∑nk=1∑njk2ϕ(gcd(i,j,k))=d=1∑ni=1∑nj=1∑nk=1∑njk2ϕ(d)(gcd(i,j,k)=d)=d=1∑nd3ϕ(d)i=1∑dnj=1∑dnk=1∑dnjk2(gcd(i,j,k)=1)=d=1∑nd3ϕ(d)t=1∑dnμ(t)t3i=1∑dtnj=1∑dtnk=1∑dtnjk2设f(n)=i=1∑nj=1∑nk=1∑njk2,T=dt,再次对上式化简:=T=1∑nf(Tn)T3d∣T∑ϕ(d)μ(dT)我们假设g(n)=n3d∣n∑ϕ(d)μ(dn)
显然n3是较好解决的,所以我们考虑后面的式子∑d∣nϕ(d)μ(nd)写成迪利克雷卷积的形式g(n)=(ϕ∗μ)(n),显然g(n)是一个积性函数n=1,g(1)=ϕ(1)μ(1)=1n=p,g(p)=ϕ(1)μ(p)+ϕ(p)μ(1)=1∗(−1)+(p−1)∗1=p−2n=pkd,由于pk与d互质,所以有g(n)=g(pk)g(d)所以我们重点考虑如何求g(pk)g(pk)=∑i=0kϕ(pi)μ(pk−i)=∑i=0kϕ(pk−i)μ(pi)显然对于i≥2时μ(pi)=0,所以g(pk)=∑i=01ϕ(pk−i)μ(pi)=ϕ(pk)−ϕ(pk−1)这里预处理就结束了,接下来就能快乐的数论分块了。显然n ^ 3是较好解决的,所以我们考虑后面的式子\sum_{d \mid n} \phi(d) \mu(\frac{n}{d})\\ 写成迪利克雷卷积的形式g(n) = (\phi * \mu)(n),显然g(n)是一个积性函数\\ n = 1, g(1) = \phi(1)\mu(1) = 1\\ n = p, g(p) = \phi(1)\mu(p) + \phi(p) \mu(1) = 1 * (-1) + (p - 1) * 1 = p - 2\\ n = p ^ k d,由于p ^ k与d互质,所以有g(n) = g(p ^ k) g(d)\\所以我们重点考虑如何求g(p ^ k)\\ g(p ^ k) = \sum_{i = 0} ^{k} \phi(p ^ i)\mu(p ^ {k - i})\\ = \sum_{i = 0} ^{k} \phi(p ^ {k - i})\mu(p ^ i)\\ 显然对于i \geq 2时\mu(p ^ i) = 0,所以\\ g(p ^ k) = \sum_{i = 0} ^{1} \phi(p ^ {k - i}) \mu(p ^ i) = \phi(p ^ k) - \phi(p ^ {k - 1})\\ 这里预处理就结束了,接下来就能快乐的数论分块了。 显然n3是较好解决的,所以我们考虑后面的式子d∣n∑ϕ(d)μ(dn)写成迪利克雷卷积的形式g(n)=(ϕ∗μ)(n),显然g(n)是一个积性函数n=1,g(1)=ϕ(1)μ(1)=1n=p,g(p)=ϕ(1)μ(p)+ϕ(p)μ(1)=1∗(−1)+(p−1)∗1=p−2n=pkd,由于pk与d互质,所以有g(n)=g(pk)g(d)所以我们重点考虑如何求g(pk)g(pk)=i=0∑kϕ(pi)μ(pk−i)=i=0∑kϕ(pk−i)μ(pi)显然对于i≥2时μ(pi)=0,所以g(pk)=i=0∑1ϕ(pk−i)μ(pi)=ϕ(pk)−ϕ(pk−1)这里预处理就结束了,接下来就能快乐的数论分块了。
代码
/*Author : lifehappy
*/
#pragma GCC optimize(2)
#pragma GCC optimize(3)
#include <bits/stdc++.h>#define mp make_pair
#define pb push_back
#define endl '\n'
#define mid (l + r >> 1)
#define lson rt << 1, l, mid
#define rson rt << 1 | 1, mid + 1, r
#define ls rt << 1
#define rs rt << 1 | 1using namespace std;typedef long long ll;
typedef unsigned long long ull;
typedef pair<int, int> pii;const double pi = acos(-1.0);
const double eps = 1e-7;
const int inf = 0x3f3f3f3f;inline ll read() {ll f = 1, x = 0;char c = getchar();while(c < '0' || c > '9') {if(c == '-') f = -1;c = getchar();}while(c >= '0' && c <= '9') {x = (x << 1) + (x << 3) + (c ^ 48);c = getchar();}return f * x;
}const int N = 1e7 + 10, mod = 1 << 30, inv3 = 715827883;int prime[N], cnt;ll f[N], g[N], n;bool st[N];ll quick_pow(ll a, int n) {ll ans = 1;while(n) {if(n & 1) ans = ans * a % mod;a = a * a % mod;n >>= 1;}return ans;
}void init() {g[1] = 1;for(int i = 2; i < N; i++) {if(!st[i]) {prime[cnt++] = i;g[i] = i - 2;}for(int j = 0; j < cnt && i * prime[j] < N; j++) {st[i * prime[j]] = 1;if(i % prime[j] == 0) {int num = 1, temp = i;while(temp % prime[j] == 0) {temp /= prime[j], num++;}g[i * prime[j]] = quick_pow(prime[j], num - 2) * ((1ll * prime[j] * prime[j] % mod - 2 * prime[j] % mod + 1 + mod) % mod) % mod * g[temp] % mod;break;}g[i * prime[j]] = g[i] * g[prime[j]];}}for(int i = 1; i < N; i++) {f[i] = ((1ll * i * (1 + i) / 2 % mod) * i % mod) * ((1ll * (i + 1) * i / 2) % mod * (2 * i + 1) % mod * inv3 % mod) % mod;g[i] = (1ll * i * i % mod * i % mod * g[i] % mod + g[i - 1]) % mod;}
}int main() {// freopen("in.txt", "r", stdin);// freopen("out.txt", "w", stdout);// ios::sync_with_stdio(false), cin.tie(0), cout.tie(0);init();int T = read();while(T--) {n = read();ll ans = 0;for(ll l = 1, r; l <= n; l = r + 1) {r = n / (n / l);ans = (ans + 1ll * f[n / l] * ((g[r] - g[l - 1] + mod) % mod) % mod) % mod;}printf("%lld\n", ans);}return 0;
}