【51NOD 1847】奇怪的数学题(莫比乌斯反演,杜教筛,min_25筛,第二类斯特林数)
【51NOD 1847】奇怪的数学题(莫比乌斯反演,杜教筛,min_25筛,第二类斯特林数)
题面
\]
其中\(sgcd\)表示次大公约数。
题解
明摆着\(sgcd\)就是在\(gcd\)的基础上除掉\(gcd\)的最小因数。
所以直接枚举\(gcd\)。
ans&=\sum_{i=1}^n\sum_{j=1}^n sgcd(i,j)^k\\
&=\sum_{i=1}^n\sum_{j=1}^n (\frac{gcd(i,j)}{min_p(gcd(i,j))})^k\\
&=\sum_{d=1}^n (\frac{d}{min_p(d)})^k\sum_{i=1}^n\sum_{j=1}^n [gcd(i,j)=1]\\
&=\sum_{d=1}^n (\frac{d}{min_p(d)})^k\sum_{i=1}^{n/d}\mu(i)[\frac{n}{id}]^2\\
&=\sum_{T=1}^n [\frac{n}{T}]^2\sum_{d|T}(\frac{d}{min_p(d)})^k\mu(\frac{T}{d})
\end{aligned}\]
好啦好啦,又有一个看起来要求前缀和的狄利克雷卷积啦。
令\(\displaystyle f(d)=(\frac{d}{min_p(d)})^k\)
那么后面那个东西就是\((f*\mu)(T)\)
要求它的前缀和,emmmm,杜教筛。
看到\(\mu\),emmm,构造\(g(x)=1\)
那么令\(\displaystyle S(n)=\sum_{i=1}^n (f*\mu)(i)\)
那么套杜教筛的式子:
\]
把\(g(x)=1\)带进去就得到了:
\]
行,来筛\(f\)前缀和,涉及到了最小质因子???\(min\_25\)筛。
考虑一下\(f\)的前缀和是什么东西,首先所有质数的贡献都是\(1\),这里需要计算质数个数。
然后就是枚举最小质因子求剩下部分的\(k\)次幂的和就行了。
而很有趣的一点就是\(f\)所要求的所有合数的贡献,恰好就是计算所有质数\(k\)次方贡献时减去的部分。所以直接加上就好啦。
然后这里涉及到了自然数幂和的问题。推导戳这里
\]
这样一来就可以直接算啦。
#include<iostream>
#include<cstdio>
#include<cmath>
using namespace std;
#define uint unsigned int
#define MAX 100000
uint n,blk;int k;
bool zs[MAX];
int pri[MAX],tot;
uint prik[MAX],sprik[MAX];
uint w[MAX],g[MAX],h[MAX],f[MAX];
int id1[MAX],id2[MAX],m;
uint S[60][60];
int getid(uint x){return (x<=blk)?id1[x]:id2[n/x];}
uint fpow(uint a,int b)
{
uint s=1;
while(b){if(b&1)s*=a;a*=a;b>>=1;}
return s;
}
void pre(int n)
{
for(int i=2;i<=n;++i)
{
if(!zs[i])pri[++tot]=i,prik[tot]=fpow(i,k);
for(int j=1;j<=tot&&i*pri[j]<=n;++j)
{
zs[i*pri[j]]=true;
if(i%pri[j]==0)break;
}
}
for(int i=1;i<=tot;++i)sprik[i]=sprik[i-1]+prik[i];
}
uint Sumk(int n)
{
uint ret=0;
for(int i=1;i<=k;++i)
{
uint s=1;
for(int j=0;j<=i;++j)
if((n+1-j)%(i+1))s*=n+1-j;
else s*=(n+1-j)/(i+1);
ret+=S[k][i]*s;
}
return ret;
}
bool vis[MAX];
uint M[MAX];
uint Solve(uint n)
{
if(vis[getid(n)])return M[getid(n)];
uint ret=f[getid(n)];
for(uint i=2,j;i<=n;i=j+1)
j=n/(n/i),ret-=(j-i+1)*Solve(n/i);
vis[getid(n)]=true;return M[getid(n)]=ret;
}
int main()
{
scanf("%u%d",&n,&k);pre(blk=sqrt(n));S[0][0]=1;
for(int i=1;i<=k;++i)
for(int j=1;j<=i;++j)
S[i][j]=S[i-1][j-1]+j*S[i-1][j];
for(uint i=1,j;i<=n;i=j+1)
{
j=n/(n/i);w[++m]=n/i;
g[m]=w[m]-1;h[m]=Sumk(w[m])-1;
if(w[m]<=blk)id1[w[m]]=m;
else id2[n/w[m]]=m;
}
for(int j=1;j<=tot;++j)
for(int i=1;i<=m&&1u*pri[j]*pri[j]<=w[i];++i)
{
int k=getid(w[i]/pri[j]);
g[i]-=g[k]-(j-1);
h[i]-=prik[j]*(h[k]-sprik[j-1]);
f[i]+=h[k]-sprik[j-1];
}
for(int i=1;i<=m;++i)f[i]+=g[i];
uint ans=0;
for(uint i=1,j,lt=0,nw;i<=n;i=j+1)
{
j=n/(n/i);uint s=n/i;s*=s;
nw=Solve(j);ans+=s*(nw-lt);lt=nw;
}
printf("%u\n",ans);
return 0;
}
【51NOD 1847】奇怪的数学题(莫比乌斯反演,杜教筛,min_25筛,第二类斯特林数)的更多相关文章
- 洛谷P3768 简单的数学题 莫比乌斯反演+杜教筛
题意简述 求出这个式子 \[ \sum_{i=1}^n\sum_{j=1}^n ij(i,j) \bmod p \] 做法 先用莫比乌斯反演拆一下式子 \[ \begin{split} \sum_{i ...
- 「洛谷P3768」简单的数学题 莫比乌斯反演+杜教筛
题目链接 简单的数学题 题目描述 输入一个整数n和一个整数p,你需要求出 \[\sum_{i=1}^n\sum_{j=1}^n (i\cdot j\cdot gcd(i,j))\ mod\ p\] ...
- LOJ#6229. 这是一道简单的数学题(莫比乌斯反演+杜教筛)
题目链接 \(Description\) 求\[\sum_{i=1}^n\sum_{j=1}^i\frac{lcm(i,j)}{gcd(i,j)}\] 答案对\(10^9+7\)取模. \(n< ...
- 51nod 1220 约数之和【莫比乌斯反演+杜教筛】
首先由这样一个式子:\( d(ij)=\sum_{p|i}\sum_{q|j}[gcd(p,q)==1]\frac{pj}{q} \)大概感性证明一下吧我不会证 然后开始推: \[ \sum_{i=1 ...
- luogu 3768 简单的数学题 (莫比乌斯反演+杜教筛)
题目大意:略 洛谷传送门 杜教筛入门题? 以下都是常规套路的变形,不再过多解释 $\sum\limits_{i=1}^{N}\sum\limits_{j=1}^{N}ijgcd(i,j)$ $\sum ...
- [51nod 1847]奇怪的数学题
[ 51nod 1847 ]奇怪的数学题 题目 点这里看题目. 分析 是挺奇怪的...... 以下定义质数集合为\(P\),\(p_i\)为第\(i\)个质数. 定义\(mp(x)\) ...
- [复习]莫比乌斯反演,杜教筛,min_25筛
[复习]莫比乌斯反演,杜教筛,min_25筛 莫比乌斯反演 做题的时候的常用形式: \[\begin{aligned}g(n)&=\sum_{n|d}f(d)\\f(n)&=\sum_ ...
- 【bzoj3930】[CQOI2015]选数 莫比乌斯反演+杜教筛
题目描述 我们知道,从区间[L,H](L和H为整数)中选取N个整数,总共有(H-L+1)^N种方案.小z很好奇这样选出的数的最大公约数的规律,他决定对每种方案选出的N个整数都求一次最大公约数,以便进一 ...
- [BZOJ 3930] [CQOI 2015]选数(莫比乌斯反演+杜教筛)
[BZOJ 3930] [CQOI 2015]选数(莫比乌斯反演+杜教筛) 题面 我们知道,从区间\([L,R]\)(L和R为整数)中选取N个整数,总共有\((R-L+1)^N\)种方案.求最大公约数 ...
随机推荐
- css实现按钮固定在底部
实现类似如下图的功能: 采用如下的样式来控制:
- 校内模拟赛 旅行(by NiroBC)
题意: n个点的无向图,Q次操作,每次操作可以连接增加一条边,询问两个点之间有多少条边是必经之路.如果不连通,输出-1. 分析: 首先并查集维护连通性,每次加入一条边后,如果这条边将会连接两个联通块, ...
- 利用Git工具将本地创建的项目上传到Github上
前言 作为一个对前沿技术很看好的小青年,怎么能不会用Github呢?一年前我创建了Github,也知道git,但是尝试过用,但是就没弄明白,很多粉丝都问我Github的账号,想关注一波,无奈里面啥都没 ...
- nginx的web缓存服务环境部署记录
web缓存位于内容源Web服务器和客户端之间,当用户访问一个URL时,Web缓存服务器会去后端Web源服务器取回要输出的内容,然后,当下一个请求到来时,如果访问的是相同的URL,Web缓存服务器直接输 ...
- 使用requests库提交multipart/form-data 格式的请求
前言: Requests是用Python语言编写,基于urllib,采用Apache2 Licensed开源协议的HTTP库.它比urllib更加方便,可以节约我们大量的工作,完全满足HTTP测试需求 ...
- CF367C. Hard problem
链接[http://codeforces.com/group/1EzrFFyOc0/contest/706/problem/C] 题意: 他希望它们按词典顺序排序(就像字典中那样),但他不允许交换其中 ...
- BugPhobia团队篇章:团队管理与Github源代码管理说明
0x00:序言 To the searching tags, you may well fall in love withhttp://xueba.nlsde.buaa.edu.cn/ 再见,无忧时光 ...
- 20135327--linux内核分析 实践二
内核模块编译 1.实验原理 Linux模块是一些可以作为独立程序来编译的函数和数据类型的集合.之所以提供模块机制,是因为Linux本身是一个单内核.单内核由于所有内容都集成在一起,效率很高,但可扩展性 ...
- BF算法和KMP算法 python实现
BF算法 def Index(s1,s2,pos = 0): """ BF算法 """ i = pos j = 0 while(i < ...
- 广商博客沖刺第一天(new ver):
項目名稱:廣商博客 沖刺二天傳送門 此次Sprint的目标:全部sprint任務完成 时间:1星期左右 每日立会 Daily Standup Meeting: 1#A3008 晚上8点开始,大概1小时 ...