Loj #572. 「LibreOJ Round #11」Misaka Network 与求和(莫比乌斯反演 + 杜教筛 + min_25筛(递推版))
直接反演一下:∑i=1n∑i=1nf(gcd(i,j))k\sum_{i = 1}^n\sum_{i = 1}^nf(gcd(i,j))^ki=1∑ni=1∑nf(gcd(i,j))k=∑d=1n∑i=1⌊nd⌋∑i=1⌊nd⌋f(d)k∗[gcd(i,j)=1]=\sum_{d = 1}^n\sum_{i = 1}^{\lfloor\frac{n}{d}\rfloor}\sum_{i = 1}^{\lfloor\frac{n}{d}\rfloor}f(d)^k * [gcd(i,j) = 1]=d=1∑ni=1∑⌊dn⌋i=1∑⌊dn⌋f(d)k∗[gcd(i,j)=1]=∑d=1nf(d)k∑p=1⌊nd⌋μ(p)∗⌊np∗d⌋2=\sum_{d = 1}^nf(d)^k\sum_{p = 1}^{\lfloor\frac{n}{d}\rfloor}\mu(p)*{\lfloor\frac{n}{p*d}\rfloor}^2=d=1∑nf(d)kp=1∑⌊dn⌋μ(p)∗⌊p∗dn⌋2=∑T=1n⌊nT⌋2∑d∣Tf(d)kμ(Td)=\sum_{T = 1}^n{\lfloor\frac{n}{T}\rfloor}^2\sum_{d | T}f(d)^k\mu(\frac{T}{d})=T=1∑n⌊Tn⌋2d∣T∑f(d)kμ(dT)这个式子可以分块,需要预处理右半边前缀和。
令g(T)=∑d∣Tf(d)kμ(Td)g(T) = \sum_{d | T}f(d)^k\mu(\frac{T}{d})g(T)=∑d∣Tf(d)kμ(dT),则g(T)=fk∗μg(T) = f^k * \mug(T)=fk∗μ,∗*∗代表卷积
按杜教筛的套路,将ggg函数卷上 III 函数进行求和,令 h=g∗I=fkh = g * I =f^kh=g∗I=fk
∑i=1nh(i)\sum_{i = 1}^nh(i) i=1∑nh(i)=∑i=1n∑d∣iI(d)∗g(id)= \sum_{i = 1}^n\sum_{d | i}I(d) * g(\frac{i}{d})=i=1∑nd∣i∑I(d)∗g(di)=∑d=1nI(d)∑i=1⌊nd⌋g(i)=\sum_{d = 1}^nI(d)\sum_{i = 1}^{\lfloor\frac{n}{d}\rfloor}g(i)=d=1∑nI(d)i=1∑⌊dn⌋g(i)=∑d=1nI(d)S(⌊nd⌋)=∑d=1nS(⌊nd⌋)=\sum_{d = 1}^nI(d)S({\lfloor\frac{n}{d}\rfloor})=\sum_{d = 1}^nS({\lfloor\frac{n}{d}\rfloor})=d=1∑nI(d)S(⌊dn⌋)=d=1∑nS(⌊dn⌋)提出第一项 I(1)S(n)=S(n)I(1)S(n) = S(n)I(1)S(n)=S(n) 并移项:S(n)=∑i=1nh(i)−∑i=2nS(⌊ni⌋)S(n) = \sum_{i = 1}^nh(i) - \sum_{i = 2}^nS(\lfloor\frac{n}{i}\rfloor)S(n)=i=1∑nh(i)−i=2∑nS(⌊in⌋)S(n)=∑i=1nf(i)k−∑i=2nS(⌊ni⌋)S(n) = \sum_{i = 1}^nf(i)^k - \sum_{i = 2}^nS(\lfloor\frac{n}{i}\rfloor)S(n)=i=1∑nf(i)k−i=2∑nS(⌊in⌋)f(i)kf(i)^kf(i)k可以用min_25筛筛出来,筛法和Uoj 188相同,但是这题f(i)f(i)f(i)质数部分贡献不为0,先筛出合数部分再加上质数部分即可。由于递归版没有记忆化,杜教筛里每次都要计算会T,因此需要用递推版,并且由于模数是 2322^{32}232,可以用 unsigned int 类型自然溢出来取代取模运算减少常数。
代码:
#include <bits/stdc++.h>
using namespace std;
typedef long long ll;
const int maxn = 2e5 + 10;
const ll mod = 1ll << 32;
bool ispri[maxn];
ll pri[maxn], num, tot;
ll pw[maxn];
ll g[maxn], id1[maxn], id2[maxn], w[maxn], sqr;
ll sum[maxn];
ll n, k;
ll mp[maxn];
ll fpow(ll a, ll b) {ll r = 1;while (b) {if (b & 1)r = r * a % mod;a = a * a % mod;b >>= 1;}return r;
}
void sieve(int n) {ispri[0] = ispri[1] = true;num = 0;for (int i = 2; i <= n; i++) {if (!ispri[i])pri[++num] = i;for (int j = 1; j <= num && i * pri[j] <= n; j++) {ispri[i * pri[j]] = true;if (i % pri[j] == 0)break;}}
}
/*ll S(ll x, ll y) { //递归版,T飞if (pri[y] > x)return 0;ll z = x <= sqr ? id1[x] : id2[n / x];ll res = 0;for (ll i = y + 1; i <= num && pri[i] * pri[i] <= x; i++) {for (ll e = 1, pe = pri[i]; pe * pri[i] <= x; e++, pe *= pri[i]) {ll t = x / pe;ll k = t <= sqr ? id1[t] : id2[n / t];res += (S(t, i) + (g[k] - i + 1) % mod * pw[i] % mod) % mod;res %= mod;}}return res;
}*/
ll getsum(ll x) { //杜教筛ll t = x <= sqr ? id1[x] : id2[n / x];if (mp[t] != -1)return mp[t];ll res = (sum[t] + g[t]) % mod;for (ll i = 2, j; i <= x; i = j + 1) {j = x / (x / i);res -= getsum(x / i) * (j - i + 1) % mod;if (res < 0)res += mod;}return mp[t] = res;
}
int main() {sieve(maxn - 10);scanf("%lld%lld", &n, &k);memset(mp, -1, sizeof mp);for (int i = 1; i <= num; i++) {pw[i] = fpow(pri[i], k);}sqr = sqrt(n);for (ll i = 1, j; i <= n; i = j + 1) { //min_25筛离散化j = n / (n / i);w[++tot] = n / i;g[tot] = (w[tot] - 1) % mod;if (n / i <= sqr)id1[n / i] = tot;elseid2[j] = tot;}for (int i = 1; i <= num; i++) { //min_25筛预处理 gfor (int j = 1; j <= tot && pri[i] * pri[i] <= w[j]; j++) {ll t = w[j] / pri[i];ll k = t <= sqr ? id1[t] : id2[n / t];g[j] -= (g[k] - i + 1) % mod;if (g[j] < 0)g[j] += mod;}}for (int i = num; i >= 1; i--) { //min_25筛 递推版for (int j = 1; j <= tot && pri[i] * pri[i] <= w[j]; j++) {for (ll e = 1, pe = pri[i]; pe * pri[i] <= w[j]; pe = pe * pri[i]) {ll t = w[j] / pe;ll k = t <= sqr ? id1[t] : id2[n / t];sum[j] += (sum[k] + (g[k] - i + 1) % mod * pw[i] % mod) % mod;sum[j] %= mod;}}}ll ans = 0;for (ll i = 1, j; i <= n; i = j + 1) {j = n / (n / i);ll p = n / i % mod;ans += (getsum(j) - getsum(i - 1) + mod) % mod * p * p % mod;ans %= mod;}printf("%lld\n", ans);return 0;
}
Loj #572. 「LibreOJ Round #11」Misaka Network 与求和(莫比乌斯反演 + 杜教筛 + min_25筛(递推版))相关推荐
- LOJ 572 「LibreOJ Round #11」Misaka Network 与求和——min_25筛
题目:https://loj.ac/problem/572 莫比乌斯反演得 \( ans=\sum\limits_{D=1}^{n}\left\lfloor\frac{n}{D}\right\rflo ...
- Loj#572. 「LibreOJ Round #11」Misaka Network 与求和
题目 有生之年我竟然能\(A\) 这个题求的是这个 \[\sum_{i=1}^n\sum_{j=1}^nf(gcd(i,j))^k\] \(f(i)\)定义为\(i\)的次大质因子,其中\(f(p)= ...
- [LOJ]#572. 「LibreOJ Round #11」Misaka Network 与求和 min_25筛+杜教筛
Solution 推一下式子,容易得到一个线性做法:∑d=1nfk(d)((2∑i=1⌊ni⌋φ(i))−1)\sum_{d=1}^nf^k(d)((2\sum_{i=1}^{\lfloor{n\ov ...
- LOJ572. 「LibreOJ Round #11」Misaka Network 与求和 [莫比乌斯反演,杜教筛,min_25筛]
传送门 思路 (以下令\(F(n)=f(n)^k\)) 首先肯定要莫比乌斯反演,那么可以推出: \[ ans=\sum_{T=1}^n \lfloor\frac n T\rfloor^2\sum_{d ...
- 「LibreOJ Round #11」Misaka Network 与求和(杜教筛 + Min_25)
#572. 「LibreOJ Round #11」Misaka Network 与求和 推式子 ∑i=1n∑j=1nf(gcd(i,j))k∑d=1nf(d)k∑i=1nd∑j=1nd[gcd(i,j ...
- LOJ #570. 「LibreOJ Round #11」Misaka Network 与任务
观察发现,肯定是1个或两个最优. #include<bits/stdc++.h> #define ll long long #define ull unsigned ll #define ...
- 「LibreOJ Round #11」Misaka Network 与测试 (网络流跑二分图匹配)
description 研究者们想要测试 Misaka Network,于是他们把 Misaka Network 中的所有妹妹们召集到了一起. 现在妹妹们排成了 N行 M 列,有的位置没有人.现在研究 ...
- 「LibreOJ Round #11」Misaka Network 与测试【二分图最大匹配+读入坑点】
题目链接 LOJ 569 这道题的坑点或许不在于想到这个算法,而是在于这里有读入的坑点,会使得你在本地编译正确而在题目判断的时候得到WA. 因为,题目的操作系统是win的,而我自己的编译器是Mac O ...
- 「LibreOJ Round #11」Misaka Network 与任务
题解: 显然只需要知道某几位上是111的有多少个就可以容斥了,这个用枚举子集可以做到O(3n)" role="presentation" style="posi ...
最新文章
- mysql补丁如何安装_神技_如何快捷下载Oracle补丁的方法?!
- jbpm binding类深入解析
- C++中的friend详细解析
- linux查看进程相关命令
- jMeter HTTP Request Defaults 的学习笔记
- 【04】泛型中的桥方法
- CSS3-边框-外轮廓-文本-渐变-WEB字体
- body 没有被撑开_父div没有被撑开,该怎么解决?_html/css_WEB-ITnose
- java懒汉,[Java教程]java 懒汉式
- noVNC使用浏览器替代VNC客户端
- Axure RP 8 最新注册码
- mysql汽车租赁管理系统
- Hadoop “Hello World” 示例
- 医学超声成像—合成孔径法(Synthetic Aperture Methods)[1]
- lpad用法 oracle,oracle lpad 的用法
- 锆石科技开发板的简单介绍
- RFID防盗安全门,自助借还书机,让图书馆发展进入新的里程碑
- Signatures and Zero-Knowledge Proofs
- 四年级计算机考试反思,四年级期中考试反思作文300字 关于期中考试反思的作文...
- Ai机器人可以入国籍、可以当主播,当然也可以当电销精英