LOJ 题面传送门

首先将 \(\sigma_k(ij)\) 展开:

\[\sigma_k(ij)=\sum\limits_{x\mid i}\sum\limits_{y\mid j}[x\perp y](\dfrac{iy}{x})^k
\]

具体原理就是我们将一组 \(x\mid i,y\mid j,x\perp y\) 的因子对 \((x,y)\) 对应到一个 \(ij\) 的质因子 \(f(x,y)\) 上。考虑每一个质因子 \(p\),由于 \(x\perp y\) 这个限制的存在,\(x,y\) 中 \(p\) 的次数必须至少有一个为 \(0\),如果 \(x\) 中 \(p\) 次数非零那么我们就令 \(f(x,y)\) 质因子 \(p\) 的次数为 \(i\text{ 中质因子 }p\text{ 的次数}-x\text{ 中质因子 }p\text{ 的次数}\),否则我们令 \(f(x,y)\) 中质因子 \(p\) 的次数为 \(i\text{ 中质因子 }p\text{ 的次数}+y\text{ 中质因子 }p\text{ 的次数}\),不难发现这样一组 \(x\mid i,y\mid j,x\perp y\) 的因子对 \((x,y)\) 与一个 \(ij\) 的质因子形成了双射,并且 \(f(x,y)=(\dfrac{iy}{x})\),因此 \(\sigma_k(ij)=\sum\limits_{x\mid i}\sum\limits_{y\mid j}[x\perp y](\dfrac{iy}{x})^k\)。

接下来考虑计算答案:

\[\begin{aligned}
ans&=\sum\limits_{i=1}^n\sum\limits_{j=1}^n\sigma_k(ij)\\
&=\sum\limits_{i=1}^n\sum\limits_{j=1}^n\sum\limits_{x\mid i}\sum\limits_{y\mid j}[x\perp y](\dfrac{iy}{x})^k\\
&=\sum\limits_{i=1}^n\sum\limits_{j=1}^n\sum\limits_{x\mid i}\sum\limits_{y\mid j}(\dfrac{iy}{x})^k\sum\limits_{d\mid x,d\mid y}\mu(d)\\
&=\sum\limits_{d=1}^n\mu(d)d^k\sum\limits_{i=1}^{\lfloor\frac{n}{d}\rfloor}\sum\limits_{j=1}^{\lfloor\frac{n}{d}\rfloor}\sum\limits_{x\mid i}\sum\limits_{y\mid j}(\dfrac{iy}{x})^d\\
&=\sum\limits_{d=1}^n\mu(d)d^k\sum\limits_{i=1}^{\lfloor\frac{n}{d}\rfloor}\sum\limits_{x\mid i}(\dfrac{i}{x})^k\sum\limits_{j=1}^{\lfloor\frac{n}{d}\rfloor}\sum\limits_{y\mid j}y^k\\
&=\sum\limits_{d=1}^n\mu(d)d^k(\sum\limits_{i=1}^{\lfloor\frac{n}{d}\rfloor}i^k\lfloor\dfrac{n}{id}\rfloor)^2
\end{aligned}
\]

考虑怎么维护这个东西,首先整除分块,那么前面的东西等价于求 \(\mu·\text{id}_k\) 的前缀和。根据提公因式 \((\mu·\text{id}_k)*(I·\text{id}_k)=(\mu*I)·\text{id}_k=\epsilon\)。\(I·\text{id}_k\) 的前缀和对于 \(\le 10^7\) 的部分可预处理,\(>10^7\) 的部分可用拉格朗日插值,这样杜教筛一遍可以求出 \(\mu·\text{id}_k\) 的前缀和。后面的 \(\sum\limits_{i=1}^{\lfloor\frac{n}{d}\rfloor}i^k\lfloor\dfrac{n}{id}\rfloor\) 可以再套一层整除分块,\(\text{id}_k\) 的前缀和照样小数据预处理大数据插值。不难发现我们只会在 \(n\) 的关键点处插值,而 \(n\) 的 \(>10^7\) 的关键点最多 \(1000\) 个,因此我们最多插值 \(1000\) 次,总复杂度 \(n^{3/4}+1000k\),可以通过。

const int MAXV=2e7;
const int MAXK=7777;
const int MOD=1e9+7;
ll n;int k,fac[MAXK+5],ifac[MAXK+5];
int qpow(int x,int e){
int ret=1;
for(;e;e>>=1,x=1ll*x*x%MOD) if(e&1) ret=1ll*ret*x%MOD;
return ret;
}
void init_fac(int n){
for(int i=(fac[0]=ifac[0]=ifac[1]=1)+1;i<=n;i++) ifac[i]=1ll*ifac[MOD%i]*(MOD-MOD/i)%MOD;
for(int i=1;i<=n;i++) fac[i]=1ll*fac[i-1]*i%MOD,ifac[i]=1ll*ifac[i-1]*ifac[i]%MOD;
}
int mu[MAXV+5],pr[MAXV/10+5],prcnt=0,idk[MAXV+5],sum[MAXV+5],smu_pw[MAXV+5];
bool vis[MAXV+5];
void sieve(int n){
idk[1]=mu[1]=1;
for(int i=2;i<=n;i++){
if(!vis[i]) mu[i]=-1,pr[++prcnt]=i,idk[i]=qpow(i,k);
for(int j=1;j<=prcnt&&pr[j]*i<=n;j++){
vis[pr[j]*i]=1;idk[pr[j]*i]=1ll*idk[pr[j]]*idk[i]%MOD;
if(i%pr[j]==0) break;mu[i*pr[j]]=-mu[i];
}
}
for(int i=1;i<=n;i++) sum[i]=(sum[i-1]+idk[i])%MOD;
for(int i=1;i<=n;i++) smu_pw[i]=(0ll+smu_pw[i-1]+mu[i]*idk[i]+MOD)%MOD;
}
int pre[MAXK+5],suf[MAXK+5];
unordered_map<ll,int> _sum,_smu_pw;
int calc_sum(ll n){
if(k==0) return n%MOD;
if(n<=MAXV) return sum[n];n%=MOD;
if(_sum.count(n)) return _sum[n];
pre[0]=suf[k+3]=1;int res=0;
for(int i=1;i<=k+2;i++) pre[i]=1ll*pre[i-1]*(n-i+MOD)%MOD;
for(int i=k+2;i;i--) suf[i]=1ll*suf[i+1]*(n-i+MOD)%MOD;
for(int i=1;i<=k+2;i++){
int mul=1ll*sum[i]*pre[i-1]%MOD*suf[i+1]%MOD*ifac[i-1]%MOD*ifac[k+2-i]%MOD;
if((k+2-i)&1) mul=MOD-mul;res=(res+mul)%MOD;
} return _sum[n]=res;
}
int calc_smu_pw(ll n){
if(n<=MAXV) return smu_pw[n];
if(_smu_pw.count(n)) return _smu_pw[n];
int res=1;
for(ll l=2,r;l<=n;l=r+1){
r=n/(n/l);
res=(res-1ll*(calc_sum(r)-calc_sum(l-1)+MOD)*calc_smu_pw(n/l)%MOD+MOD)%MOD;
} return _smu_pw[n]=res;
}
int main(){
scanf("%lld%d",&n,&k);sieve(MAXV);init_fac(MAXK);
int res=0;
for(ll l=1,r;l<=n;l=r+1){
r=n/(n/l);int sm=0;ll lim=n/l;
for(ll L=1,R;L<=lim;L=R+1){
R=lim/(lim/L);
sm=(sm+1ll*(lim/L)%MOD*(calc_sum(R)-calc_sum(L-1)+MOD))%MOD;
} sm=1ll*sm*sm%MOD;
res=(res+1ll*(calc_smu_pw(r)-calc_smu_pw(l-1)+MOD)*sm)%MOD;
} printf("%d\n",res);
return 0;
}

LOJ #6207 - 米缇(杜教筛+拉格朗日插值)的更多相关文章

  1. EOJ Monthly 2019.11 E. 数学题(莫比乌斯反演+杜教筛+拉格朗日插值)

    传送门 题意: 统计\(k\)元组个数\((a_1,a_2,\cdots,a_n),1\leq a_i\leq n\)使得\(gcd(a_1,a_2,\cdots,a_k,n)=1\). 定义\(f( ...

  2. LOJ 6229 LCM / GCD (杜教筛+Moebius)

    链接: https://loj.ac/problem/6229 题意: \[F(n)=\sum_{i=1}^n\sum_{j=1}^i\frac{\mathrm{lcm}(i,j)}{\mathrm{ ...

  3. 【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\ ...

  4. 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\) 的次大质 ...

  5. LOJ#6491. zrq 学反演(莫比乌斯反演 杜教筛)

    题意 题目链接 Sol 反演套路题? 不过最后一步还是挺妙的. 套路枚举\(d\),化简可以得到 \[\sum_{T = 1}^m (\frac{M}{T})^n \sum_{d \ | T} d \ ...

  6. loj#6229. 这是一道简单的数学题 (??反演+杜教筛)

    题目链接 题意:给定\(n\le 10^9\),求:\(F(n)=\sum_{i=1}^n\sum_{j=1}^i\frac{\mathrm{lcm}(i,j)}{\mathrm{gcd}(i,j)} ...

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

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

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

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

  9. 【51nod1847】奇怪的数学题(Min_25筛+杜教筛)

    题面 传送门 题解 这题有毒--不知为啥的错误调了半天-- 令\(f(i)={sgcd(i)}\),那么容易看出\(f(i)\)就是\(i\)的次大质因子,用\(i\)除以它的最小质因子即可计算 于是 ...

随机推荐

  1. 【c++ Prime 学习笔记】第16章 模板与泛型编程

    面向对象编程(OOP)和泛型编程(GP)都能处理在编写程序时类型未知的情况 OOP能处理运行时获取类型的情况 GP能处理编译期可获取类型的情况 标准库的容器.迭代器.算法都是泛型编程 编写泛型程序时独 ...

  2. C/C++ 数据类型 表示最大 最小数值 探讨

    C/C++中存储数字格式有整型和浮点型 字符型数据本质上也是以整型存储 整型 对于整型数据,最大值最小值很好计算 先确定对应数据型在本地所占用的字节数,同一数据型由于系统或者编译器的不同,所占字节不同 ...

  3. CF375D Tree and Queries 题解

    感觉CF的题目名都好朴素的样子 你谷链接 首先这题显然是个dsu on tree 但是我不会. 其次这题显然是个莫队.这我会啊! 然后会发现好像不是很对劲.因为每次询问都有一个k,貌似和传统的莫队数颜 ...

  4. 『学了就忘』Linux基础 — 14、Linux系统的设备文件名和挂载

    目录 1.设备文件名 (1)为什么需要设备文件名 (2)硬件设备文件名命名规则 2.挂载点 3.挂载 (1)什么是挂载 (2)挂载前的分区要求 (3)小结(重点) 1.设备文件名 (1)为什么需要设备 ...

  5. MVC +Jqyery+Ajax 实现弹出层提醒

    CSS部分: /*登录提示*/ * {margin: 0; padding: 0; } .layer { width: 350px; padding: 20px; background: #fff; ...

  6. 腾讯云星星海SA2云服务器特点

    一.腾讯云星星海SA2云服务器特点 腾讯云深度定制AMD处理器.AMD EPYC ROME ,频率3.3Ghz.提供超大单核 L3 Cache.(基础频率2.6Ghz,睿频3.3Ghz).企业级服务器 ...

  7. HDC2021:HMS Core分析服务,数智化营销闭环方案帮助开发者实现精益增长

    10.22-10.24华为开发者大会2021(Together)在东莞如期举行.本次大会上,HMS Core华为分析服务作为多平台.跨设备的一站式数据分析平台以数据驱动业务智能决策为理念,带来了数智化 ...

  8. Go语言实现APPID登录

    package thirdparty import ( "crypto/rsa" "fmt" "github.com/dgrijalva/jwt-go ...

  9. LINUX系统新增及自动挂载硬盘-九五小庞

    Linux系统下,添加新硬盘后,自动挂载的方法   1,列出所有硬盘,找到需要挂载的硬盘,例如/dev/vdb.输入: fdisk -l   2,查看硬盘是不是已经被挂载.一个硬盘不能重复挂载,已经挂 ...

  10. Python使用ConfigParser模块读取配置文件(config.ini)以及写入配置文件

    前言 使用配置文件来灵活的配置一些参数是一件很常见的事情,配置文件的解析并不复杂,在python里更是如此,在官方发布的库中就包含有做这件事情的库,那就是configParser.configPars ...