[LOJ 572] Misaka Network 与求和
一、题目
二、解法
直接推柿子吧:
\]
\]
\]
\]
上面的式子就是普通的莫比乌斯反演,现在发现有些做不动了,算的时候外面可以套整除分块,但是里面就很难算的。因为 \(n\) 太大了所以不能预处理,我们考虑用筛法来做后面那个部分的前缀和。
设 \(h(i)=\sum_{d|i}f(d)\mu(\frac{i}{d})=f*\mu\) ,如果能求出 \(\sum_{i=1}^n h(i)\) 我们就成功了。考虑杜教筛,令辅助函数 \(g\) 为 \(I\) ,那么 \(g\) 的前缀和是很好求的,\(h*g=f*\mu*I=f\) ,它的前缀和虽然看上去还是很难,但是已经得到简化了。
求 \(f\) 的前缀和可以用 \(\tt Min25\) ,由于是次大的质因数产生贡献,所以我们可以在递归的时候,算每一个比他大的质数和他的贡献,也就是这个质数作为最大的质因子,他作为次大的质因子的贡献。还有一种情况是最大的质因子就是他,但是这要求次数要大于 \(1\) ,递归部分代码可以这样写:
int S(int x,int y)
{
if(x<=p[y]) return 0;//出口
int ans=pk[y]*(g[id(x)]-y)%MOD;//y一定是上一个质因数,这里我们算贡献,g是质数个数
for(int i=y+1;i<=cnt && p[i]*p[i]<=x;i++)//Min25
{
int pr=p[i];
for(int e=1;pr<=x;e++,pr*=p[i])
ans=(ans+S(x/pr,i)+(e!=1)*pk[i])%MOD;//如果次数大于1,那么可以直接贡献
}
return ans;
}
然后我们的杜教筛和 \(S(n,0)\) 都是需要记忆化的,由于我写自然溢出 \(\tt Wa\) 了,所以我只能暴力模了。
#include <cstdio>
#include <iostream>
#include <cmath>
#include <map>
using namespace std;
const int N = 200000;
const int M = N+5;
#define int long long
const int MOD = 4294967296ll;
int read()
{
int x=0,f=1;char c;
while((c=getchar())<'0' || c>'9') {if(c=='-') f=-1;}
while(c>='0' && c<='9') {x=(x<<3)+(x<<1)+(c^48);c=getchar();}
return x*f;
}
int n,k,cnt,tot,sqr,p[M],vis[M],pk[M],w[M];
int ans,g[M],p1[M],s1[M],p2[M],s2[M],id1[M],id2[M];
int qkpow(int a,int b)
{
int r=1;
while(b>0)
{
if(b&1) r=r*a%MOD;
a=a*a%MOD;
b>>=1;
}
return r;
}
void init(int n)
{
p[0]=pk[0]=1;
for(int i=2;i<=n;i++)
{
if(!vis[i])
{
p[++cnt]=i;
pk[cnt]=qkpow(i,k);
}
for(int j=1;j<=cnt && i*p[j]<=n;j++)
{
vis[i*p[j]]=1;
if(i%p[j]==0) break;
}
}
}
int id(int x)
{
if(x<=sqr) return id1[x];
return id2[n/x];
}
int S(int x,int y)
{
if(x<=p[y]) return 0;
int ans=pk[y]*(g[id(x)]-y)%MOD;
for(int i=y+1;i<=cnt && p[i]*p[i]<=x;i++)
{
int pr=p[i];
for(int e=1;pr<=x;e++,pr*=p[i])
ans=(ans+S(x/pr,i)+(e!=1)*pk[i])%MOD;
}
return ans;
}
int zy(int n)
{
if(p2[id(n)]) return s2[id(n)];
s2[id(n)]=S(n,0);p2[id(n)]=1;
return s2[id(n)];
}
int get(int n)
{
if(n<=1) return 0;
if(p1[id(n)]) return s1[id(n)];
int ans=zy(n);
for(int l=2,r;l<=n;l=r+1)
{
r=n/(n/l);
ans=(ans-(r-l+1)*get(n/l))%MOD;
}
s1[id(n)]=ans;p1[id(n)]=1;
return ans;
}
signed main()
{
n=read();k=read();
init(N);sqr=sqrt(n);
for(int l=1,r;l<=n;l=r+1)
{
r=n/(n/l);//写错了
w[++tot]=n/l;
g[tot]=w[tot]-1;
if(n/l<=sqr) id1[n/l]=tot;
else id2[n/(n/l)]=tot;
}
for(int i=1;i<=cnt;i++)
for(int j=1;j<=tot && p[i]*p[i]<=w[j];j++)
g[j]-=g[id(w[j]/p[i])]-i+1;
for(int l=1,r;l<=n;l=r+1)
{
r=n/(n/l);
ans=(ans+(n/l)*(n/l)*(get(r)-get(l-1)))%MOD;
}
printf("%lld\n",(ans+MOD)%MOD);
}
[LOJ 572] Misaka Network 与求和的更多相关文章
- loj 572 Misaka Network 与求和 —— min_25筛
题目:https://loj.ac/problem/572 推式子:https://www.cnblogs.com/cjoieryl/p/10150718.html 又学习了一下杜教筛hh: 原来 u ...
- 【LOJ#572】Misaka Network 与求和(莫比乌斯反演,杜教筛,min_25筛)
[LOJ#572]Misaka Network 与求和(莫比乌斯反演,杜教筛,min_25筛) 题面 LOJ \[ans=\sum_{i=1}^n\sum_{j=1}^n f(gcd(i,j))^k\ ...
- 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 与求和(min25筛,杜教筛,莫比乌斯反演)
题意 求 \[ \sum_{i = 1}^{n} \sum_{i = 1}^{n} f(\gcd(i, j))^k \pmod {2^{32}} \] 其中 \(f(x)\) 为 \(x\) 的次大质 ...
- 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)= ...
- LOJ572: Misaka Network 与求和
传送门 假设 \(f^k(i)\) 就是 \(f(i)\) 莫比乌斯反演得到 \[ans=\sum_{i=1}^{N}\lfloor\frac{N}{i}\rfloor^2\sum_{d|i}f(d) ...
- 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 ...
- 可能是一篇(抄来的)min25学习笔记
可能是一篇(抄来的)min25学习笔记 一个要求很多的积性函数 我们考虑有一个积性函数,这个函数满足可以快速计算质数处的值 且质数可以写成一个多项式的形式--而且这个多项式如果强行套在合数上,满足积性 ...
- Min_25 筛小结
Min_25 筛这个东西,完全理解花了我很长的时间,所以写点东西来记录一些自己的理解. 它能做什么 对于某个数论函数 \(f\),如果满足以下几个条件,那么它就可以用 Min_25 筛来快速求出这个函 ...
随机推荐
- Kubernets二进制安装(8)之部署四层反向代理
四层反向代理集群规划 主机名 角色 IP地址 mfyxw10.mfyxw.com 4层负载均衡(主) 192.168.80.10 mfyxw20.mfyxw.com 4层负载均衡(从) 192.168 ...
- 接口测试框架Requests
目录 Requests Requests安装 Requests常见接口请求方法构造 请求目标构造 header构造 cookie 构造请求体 Get Query请求 Form请求参数 JSON请求体构 ...
- List遍历以及剔除指定数据
一.list三种遍历方式 1.for循环 List<String> list = new ArrayList<String>(); list.add("A" ...
- Nginx环境下,PHP下载,中文文件,下载失效(英文可以下载)怎么解决呢?
参考出处: http://www.imooc.com/qadetail/76393 Nginx环境下,PHP下载,中文文件,下载失效(英文可以下载)怎么解决呢? 背景介绍: 文件名 为英文时可以下载 ...
- vue & arrow function error
vue & arrow function error <template> <div class="home"> <img alt=" ...
- React Toolchains
React Toolchains Create React App / component library https://create-react-app.dev/docs/getting-star ...
- how to install MySQL on macOS
how to install MySQL on macOS MySQL Community Server 8.0.21 # version $ mysqladmin --version # 8.0.2 ...
- puppeteer render local HTML template bug
puppeteer render local HTML template bug ➜ url-to-poster git:(master) ✗ dev ^-v-^ app is running in ...
- SVG to GeoJSON
SVG to GeoJSON GEOJSON https://geojson.org/ http://geojson.io/ https://github.com/mapbox/geojson.io/ ...
- 2021 NGK生态所体验好、交易快 引人注目!
据悉,NGK计划于2021年2月15日正式上线自己的生态所(时间待定),目的在于满足NGK生态建设者对于NGK几大币种的交易等需求,如NGK.BGV.SPC.USDN.VAST等.只要上NGK生态所, ...