2019南昌网络赛G. tsy‘s number(反演 + 积性函数O(n)预处理)
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}ze8trgl8bvbq} \sum_{j = 1} ^{\frac{n}ze8trgl8bvbq} \sum_{k = 1} ^{\frac{n}ze8trgl8bvbq}jk ^ 2 (gcd(i, j, k) = 1)\\ = \sum_{d = 1} ^{n} d ^ 3 \phi(d) \sum_{t = 1} ^{\frac{n}ze8trgl8bvbq} \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}ze8trgl8bvbq)\\ 我們假設g(n) = n ^ 3 \sum_{d \mid n} \phi(d) \mu(\frac{n}ze8trgl8bvbq)\\ i=1∑n?j=1∑n?k=1∑n??(i)?(j)?(k)?(i)?(j2)?(k3)??(gcd(i,j,k))我們假定j=p1k1??p2k2??p3p3??……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)?=p1k1??p2k2??p3p3??……pnkn??=j同樣的,我們不難推出?(k)?(k3)?=k2對上式化簡:=i=1∑n?j=1∑n?k=1∑n?jk2?(gcd(i,j,k))=d=1∑n?i=1∑n?j=1∑n?k=1∑n?jk2?(d)(gcd(i,j,k)=d)=d=1∑n?d3?(d)i=1∑dn??j=1∑dn??k=1∑dn??jk2(gcd(i,j,k)=1)=d=1∑n?d3?(d)t=1∑dn??μ(t)t3i=1∑dtn??j=1∑dtn??k=1∑dtn??jk2設f(n)=i=1∑n?j=1∑n?k=1∑n?jk2,T=dt,再次對上式化簡:=T=1∑n?f(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}ze8trgl8bvbq)\\ 寫成迪利克雷卷積的形式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; }總結
以上是生活随笔為你收集整理的2019南昌网络赛G. tsy‘s number(反演 + 积性函数O(n)预处理)的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: MySQL建库建表(初识MySQL)
- 下一篇: HDU 4812 D Tree (点分治