题目

有生之年我竟然能\(A\)

这个题求的是这个

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

\(f(i)\)定义为\(i\)的次大质因子,其中\(f(p)=1,f(1)=0\)

看到这道题的第一反应肯定是这东西TM还能求

习惯性反演

\[\sum_{d=1}^nF(d)f(d)^k
\]

\[=\sum_{d=1}^nf(d)^k\sum_{d|i}\mu(\frac{i}{d})\left \lfloor \frac{n}{i} \right \rfloor^2
\]

\[=\sum_{i=1}^n\left \lfloor \frac{n}{i} \right \rfloor^2\sum_{d|i}\mu(\frac{i}{d})f(d)^k
\]

现在处理后面那个\(\mu\times f\)的前缀和就可以整除分块了

看到数据范围不小,考虑杜教筛,在卷上一个\(I\),把\(\mu\)消掉

于是就有

\[S(n)=\sum_{i=1}^nf(i)^k-\sum_{i=2}^nI(i)S(\left \lfloor \frac{n}{i} \right \rfloor)
\]

发现只需要求出\(\sum_{i=1}^nf(i)^k\)就可以杜教筛了

这个东西显然可以被Min_25处理,就是算次大质因子的时候贡献算成\(k\)次方即可

代码

#include <tr1/unordered_map>
#include<algorithm>
#include<iostream>
#include<cstring>
#include<cstdio>
#include<cmath>
#define maxn 3000005
#define re register
#define LL unsigned long long
using namespace std::tr1;
unordered_map<LL,LL> ma;
LL n,p[maxn],w[maxn],id1[maxn],id2[maxn],K,mu[maxn],Sqr;
LL m,f[maxn],tot,F[maxn][2],pre[maxn],D[maxn],g[maxn];
inline LL quick(LL a,LL b) {LL s=1;while(b) {if(b&1ll) s*=a;b>>=1ll;a*=a;}return s;}
inline LL S(LL x,int y) {
if(x<=1&&p[y]>x) return 0;
LL ans=0;
for(re int k=y;k<=tot&&1ll*p[k]*p[k]<=x;k++) {
LL p1=p[k];
for(;p1<=x;p1*=p[k]) {
ans+=S(x/p1,k+1);
LL t=g[(x/p1<=Sqr)?id1[x/p1]:id2[n/(x/p1)]];
if(t+1>k) ans+=(t+1-k)*D[p[k]];
}
}
return ans;
}
LL calc(LL x) {
if(x<=Sqr) return pre[x];
if(ma[x]) return ma[x];
LL cnt=S(x,1)+g[id2[n/x]];
for(re LL l=2,r;l<=x;l=r+1) {
r=x/(x/l);cnt-=(r-l+1)*calc(x/l);
}
return ma[x]=cnt;
}
int main()
{
scanf("%u%u",&n,&K);Sqr=std::pow(n,0.666);
for(re LL l=1,r;l<=n;l=r+1) {
r=n/(n/l);w[++m]=n/l;
if(w[m]<=Sqr) id1[w[m]]=m;else id2[n/w[m]]=m;
g[m]=w[m]-1;
}
f[1]=1;D[1]=1;mu[1]=1;
for(re int i=2;i<=Sqr;i++) {
if(!f[i]) p[++tot]=i,D[i]=quick(i,K),mu[i]=-1;
for(re int j=1;j<=tot&&p[j]*i<=Sqr;j++) {
f[p[j]*i]=1;if(i%p[j]==0) break;mu[p[j]*i]=-1*mu[i];
}
}
for(re int j=1;j<=tot&&1ll*p[j]*p[j]<=n;j++)
for(re int i=1;i<=m&&1ll*p[j]*p[j]<=w[i];i++) {
int k=(w[i]/p[j]<=Sqr)?id1[w[i]/p[j]]:id2[n/(w[i]/p[j])];
g[i]=g[i]-g[k]+j-1;
}
memset(f,0,sizeof(f));f[1]=1;
for(re int i=2;i<=Sqr;i++){
if(f[i]) continue;
F[i][1]=1;
for(re int j=i+i;j<=Sqr;j+=i) f[j]=1,F[j][1]=F[j][0],F[j][0]=i;
}
for(re int i=2;i<=Sqr;i++)
if(f[i]&&!F[i][1]) F[i][1]=F[i][0];
for(re int i=2;i<=Sqr;i++)
if(f[i]&&(i/F[i][0])%F[i][0]==0) F[i][1]=F[i][0];
for(re int i=1;i<=Sqr;i++)
for(re int j=i;j<=Sqr;j+=i)
pre[j]+=mu[j/i]*D[F[i][1]];
for(re int i=1;i<=Sqr;i++) pre[i]+=pre[i-1];
LL now=0;
for(re LL l=1,r;l<=n;l=r+1) {
r=n/(n/l);
now+=(n/l)*(n/l)*(calc(r)-calc(l-1));
}
printf("%u",(unsigned int)now);
return 0;
}

Loj#572. 「LibreOJ Round #11」Misaka Network 与求和的更多相关文章

  1. 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 ...

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

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

  4. [LOJ#530]「LibreOJ β Round #5」最小倍数

    [LOJ#530]「LibreOJ β Round #5」最小倍数 试题描述 第二天,LCR 终于启动了备份存储器,准备上传数据时,却没有找到熟悉的文件资源,取而代之的是而屏幕上显示的一段话: 您的文 ...

  5. [LOJ#516]「LibreOJ β Round #2」DP 一般看规律

    [LOJ#516]「LibreOJ β Round #2」DP 一般看规律 试题描述 给定一个长度为 \(n\) 的序列 \(a\),一共有 \(m\) 个操作. 每次操作的内容为:给定 \(x,y\ ...

  6. [LOJ#531]「LibreOJ β Round #5」游戏

    [LOJ#531]「LibreOJ β Round #5」游戏 试题描述 LCR 三分钟就解决了问题,她自信地输入了结果-- > -- 正在检查程序 -- > -- 检查通过,正在评估智商 ...

  7. [LOJ#515]「LibreOJ β Round #2」贪心只能过样例

    [LOJ#515]「LibreOJ β Round #2」贪心只能过样例 试题描述 一共有 \(n\) 个数,第 \(i\) 个数 \(x_i\) 可以取 \([a_i , b_i]\) 中任意值. ...

  8. [LOJ#525]「LibreOJ β Round #4」多项式

    [LOJ#525]「LibreOJ β Round #4」多项式 试题描述 给定一个正整数 k,你需要寻找一个系数均为 0 到 k−1 之间的非零多项式 f(x),满足对于任意整数 x 均有 f(x) ...

  9. [LOJ#526]「LibreOJ β Round #4」子集

    [LOJ#526]「LibreOJ β Round #4」子集 试题描述 qmqmqm有一个长为 n 的数列 a1,a2,……,an,你需要选择集合{1,2,……,n}的一个子集,使得这个子集中任意两 ...

随机推荐

  1. 打开usb调试的方法

    方法一: settings --> about tablet --> build number(疯狂点击)  -->回退 developer options --> USB d ...

  2. 使用C#委托来实现异步编程

    最近在我参与的几个.Net项目中都有用到异步编程,作为一名.Net小白,很有必要好好地学习一下异步编程. 什么是异步编程 异步编程指的就是不用阻塞当前线程来等待任务的完成,而是将任务扔到线程池中去执行 ...

  3. sublime text 2编辑器中文问题

    Sublime Text 2是一个非常不错的源代码及文本编辑器,但是不支持GB2312和GBK编码在很多情况下会非常麻烦.不过Sublime Package Control所以供的插件可以让Subli ...

  4. C# XML相关

    XmlDocument doc = new XmlDocument(); 1.string类型的xml,如何转换成xml类型 doc.LoadXml("需要传入的string类型的xml&q ...

  5. jquery对象与核心函数

    原生js入口函数与jQuery入口函数的区别 1.window.onload与document.ready在加载时间上的差异 document.ready会先触发,其次才是window.onload ...

  6. JavaEE之动态页面技术(JSP/EL/JSTL)

    动态页面技术(JSP/EL/JSTL) JSP技术 jsp脚本和注释 jsp脚本: 1)<%java代码%> ----- 内部的java代码翻译到service方法的内部 2)<%= ...

  7. 前端学习之路之CSS (二)

    Infi-chu: http://www.cnblogs.com/Infi-chu/ id选择器id 选择器可以为标有特定 id 的 HTML 元素指定特定的样式,CSS 中 id 选择器以 &quo ...

  8. 纯css面板插件,自适应,多样式

    最近在做公司的系统后台,用的bootstrap,在设计布局的时候不喜欢他的面板,所以自己写了这个面板插件,分享给大家 先上预览图: 默认样式: 绿色: 黄色: 蓝: 红: 使用方法: 引用MoUi.c ...

  9. Express (Routing、Middleware、托管静态文件、view engine 等等)

    1. Express 简介 Express 是基于 Node.js 平台,快速.开放.极简的 web 开发框架,它提供一系列强大的特性,帮助你创建各种 Web 和移动设备应用. Express 不对 ...

  10. Javascript 多物体运动1

    多物体运动 <!DOCTYPE html><html> <head>  <meta charset="UTF-8">  <ti ...