【51NOD 1847】奇怪的数学题(莫比乌斯反演,杜教筛,min_25筛,第二类斯特林数)

题面

51NOD

\[\sum_{i=1}^n\sum_{j=1}^nsgcd(i,j)^k
\]

其中\(sgcd\)表示次大公约数。

题解

明摆着\(sgcd\)就是在\(gcd\)的基础上除掉\(gcd\)的最小因数。

所以直接枚举\(gcd\)。

\[\begin{aligned}
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(1)S(n)=\sum_{i=1}^n (f*\mu*g)(i)-\sum_{i=2}^n g(i)S([\frac{n}{i}])
\]

把\(g(x)=1\)带进去就得到了:

\[S(n)=\sum_{i=1}^n f(i)-\sum_{i=2}^nS([\frac{n}{i}])
\]

行,来筛\(f\)前缀和,涉及到了最小质因子???\(min\_25\)筛。

考虑一下\(f\)的前缀和是什么东西,首先所有质数的贡献都是\(1\),这里需要计算质数个数。

然后就是枚举最小质因子求剩下部分的\(k\)次幂的和就行了。

而很有趣的一点就是\(f\)所要求的所有合数的贡献,恰好就是计算所有质数\(k\)次方贡献时减去的部分。所以直接加上就好啦。

然后这里涉及到了自然数幂和的问题。推导戳这里

\[\sum_{i=1}^n i^k=\sum_{j=0}^k\begin{Bmatrix}k\\j\end{Bmatrix}\frac{(n+1)^{\underline {j+1}}}{j+1}
\]

这样一来就可以直接算啦。

#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筛,第二类斯特林数)的更多相关文章

  1. 洛谷P3768 简单的数学题 莫比乌斯反演+杜教筛

    题意简述 求出这个式子 \[ \sum_{i=1}^n\sum_{j=1}^n ij(i,j) \bmod p \] 做法 先用莫比乌斯反演拆一下式子 \[ \begin{split} \sum_{i ...

  2. 「洛谷P3768」简单的数学题 莫比乌斯反演+杜教筛

    题目链接 简单的数学题 题目描述 输入一个整数n和一个整数p,你需要求出 \[\sum_{i=1}^n\sum_{j=1}^n (i\cdot j\cdot gcd(i,j))\ mod\ p\]  ...

  3. LOJ#6229. 这是一道简单的数学题(莫比乌斯反演+杜教筛)

    题目链接 \(Description\) 求\[\sum_{i=1}^n\sum_{j=1}^i\frac{lcm(i,j)}{gcd(i,j)}\] 答案对\(10^9+7\)取模. \(n< ...

  4. 51nod 1220 约数之和【莫比乌斯反演+杜教筛】

    首先由这样一个式子:\( d(ij)=\sum_{p|i}\sum_{q|j}[gcd(p,q)==1]\frac{pj}{q} \)大概感性证明一下吧我不会证 然后开始推: \[ \sum_{i=1 ...

  5. luogu 3768 简单的数学题 (莫比乌斯反演+杜教筛)

    题目大意:略 洛谷传送门 杜教筛入门题? 以下都是常规套路的变形,不再过多解释 $\sum\limits_{i=1}^{N}\sum\limits_{j=1}^{N}ijgcd(i,j)$ $\sum ...

  6. [51nod 1847]奇怪的数学题

    [ 51nod 1847 ]奇怪的数学题 题目   点这里看题目. 分析   是挺奇怪的......   以下定义质数集合为\(P\),\(p_i\)为第\(i\)个质数.   定义\(mp(x)\) ...

  7. [复习]莫比乌斯反演,杜教筛,min_25筛

    [复习]莫比乌斯反演,杜教筛,min_25筛 莫比乌斯反演 做题的时候的常用形式: \[\begin{aligned}g(n)&=\sum_{n|d}f(d)\\f(n)&=\sum_ ...

  8. 【bzoj3930】[CQOI2015]选数 莫比乌斯反演+杜教筛

    题目描述 我们知道,从区间[L,H](L和H为整数)中选取N个整数,总共有(H-L+1)^N种方案.小z很好奇这样选出的数的最大公约数的规律,他决定对每种方案选出的N个整数都求一次最大公约数,以便进一 ...

  9. [BZOJ 3930] [CQOI 2015]选数(莫比乌斯反演+杜教筛)

    [BZOJ 3930] [CQOI 2015]选数(莫比乌斯反演+杜教筛) 题面 我们知道,从区间\([L,R]\)(L和R为整数)中选取N个整数,总共有\((R-L+1)^N\)种方案.求最大公约数 ...

随机推荐

  1. Luogu P3374 【模板】树状数组 1

    真正的模板题. 树状数组的思想很简单(不如说背代码更简单),每个节点记录多个节点的信息(每个点存x&(-x)个). 道理可以参见很多大佬的博客,最后前缀和的思想搞一下就好了.不想说也不会说. ...

  2. scikit-learn的线性回归模型

    来自 http://blog.csdn.net/jasonding1354/article/details/46340729 内容概要 如何使用pandas读入数据 如何使用seaborn进行数据的可 ...

  3. [HAOI2017]方案数[组合计数、容斥、dp]

    题意 题目链接 分析 先考虑没有障碍怎么做,定义 f(i,j,k) 每一维走了 i,j,k 位的方案数,转移乘个组合数即可. 现在多了一些障碍,考虑容斥.实际我们走过的点都有严格的大小关系,所以先把所 ...

  4. Notepad++中的颜色属性设置大全

    Indent guideline style  缩进参考线的颜色Brace highlight style 鼠标指针在框架左右时框架的颜色(如css中{}   js中的())Bad brace col ...

  5. 如何看待P2P领域的羊毛党?

    本文来自网易云社区 不利:不利的影响应该是显而易见的,前面的题主也有解释过.总结来说,不利的影响主要是两点: a. 对平台毛利和资金的损害.一般来说,优惠活动本是一个用户只能享用一次,但如果注册多个账 ...

  6. ABP module-zero +AdminLTE+Bootstrap Table+jQuery权限管理系统第十五节--缓存小结与ABP框架项目中 Redis Cache的实现

    返回总目录:ABP+AdminLTE+Bootstrap Table权限管理系统一期 缓存 为什么要用缓存 为什么要用缓存呢,说缓存之前先说使用缓存的优点. 减少寄宿服务器的往返调用(round-tr ...

  7. 当给DataGrid的Itemssoure属性赋值引起TabControl_SelectionChanged事件

    在TabControl的TabItem下布局了DataGrid控件时,当给dg.ItemsSource 赋值时会触发父控件的TabControl_SelectionChanged事件; 类似问题原因可 ...

  8. JQuery_自带的动画效果

    1.方法: show:显示选中元素. hide:隐藏选中元素. toggle:显示或隐藏选中元素. fadeIn:将选中元素的不透明度逐步提升到100%. fadeOut:将选中元素的不透明度逐步降为 ...

  9. 金蝶PDA金蝶盘点机金蝶仓库条码管理方案-采购入库单教程

    采购入库单有两种做法: 第一种:按照采购订单下推的采购入库单. 第二种:直接新增采购入库单,也就是不按照采购订单下推. 按照采购订单下推生成采购入库单,会以采购订单的商品品种和数量作为应收.扫描条码入 ...

  10. CSS编码规则

    /* 和HTML一样使用两个空格来代替制表符 */ div { /* 为了代码的易读性,在每个声明块的左花括号前添加一个空格 */' padding: 15px; /* 每个声明语句的:后应该插入一个 ...