题目

有生之年我竟然能\(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;
}

转载于:https://www.cnblogs.com/asuldb/p/10381544.html

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 与求和 min_25筛+杜教筛

    Solution 推一下式子,容易得到一个线性做法:∑d=1nfk(d)((2∑i=1⌊ni⌋φ(i))−1)\sum_{d=1}^nf^k(d)((2\sum_{i=1}^{\lfloor{n\ov ...

  3. Loj #572. 「LibreOJ Round #11」Misaka Network 与求和(莫比乌斯反演 + 杜教筛 + min_25筛(递推版))

    直接反演一下:∑i=1n∑i=1nf(gcd(i,j))k\sum_{i = 1}^n\sum_{i = 1}^nf(gcd(i,j))^ki=1∑n​i=1∑n​f(gcd(i,j))k=∑d=1n ...

  4. 「LibreOJ Round #11」Misaka Network 与求和(杜教筛 + Min_25)

    #572. 「LibreOJ Round #11」Misaka Network 与求和 推式子 ∑i=1n∑j=1nf(gcd(i,j))k∑d=1nf(d)k∑i=1nd∑j=1nd[gcd(i,j ...

  5. LOJ #570. 「LibreOJ Round #11」Misaka Network 与任务

    观察发现,肯定是1个或两个最优. #include<bits/stdc++.h> #define ll long long #define ull unsigned ll #define ...

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

  7. 「LibreOJ Round #11」Misaka Network 与测试 (网络流跑二分图匹配)

    description 研究者们想要测试 Misaka Network,于是他们把 Misaka Network 中的所有妹妹们召集到了一起. 现在妹妹们排成了 N行 M 列,有的位置没有人.现在研究 ...

  8. 「LibreOJ Round #11」Misaka Network 与测试【二分图最大匹配+读入坑点】

    题目链接 LOJ 569 这道题的坑点或许不在于想到这个算法,而是在于这里有读入的坑点,会使得你在本地编译正确而在题目判断的时候得到WA. 因为,题目的操作系统是win的,而我自己的编译器是Mac O ...

  9. 「LibreOJ Round #11」Misaka Network 与任务

    题解: 显然只需要知道某几位上是111的有多少个就可以容斥了,这个用枚举子集可以做到O(3n)" role="presentation" style="posi ...

最新文章

  1. Sql server 阻塞定位
  2. P2801 教主的魔法(分块入门)
  3. java 使用new新建一个对象时的操作过程
  4. php判断目录是否有写的权限,php中判断文件空目录是否有读写权限的函数代码_php技巧...
  5. Flume 中文入门手冊
  6. 带你反编译APP然后重新打包「MacOS」
  7. qt5.13.2输出中文乱码
  8. Snagit好用吗?Snagit 2022最全快捷键指南
  9. Android给文档加水印,Android文档水印之PDF水印
  10. 又一次摔MFC坑里了
  11. python函数的使用场景_详解python中strip函数的使用场景
  12. No.1 - 制作一个简单的菜单动画效果---百度IFE
  13. “RPC好,还是RESTful好?”,这个问题不简单!
  14. 最新,87本SCI/SSCI期刊被剔除,这5本TOP刊也在内?
  15. html实现下载功能(两种方式)
  16. 聊聊最近的几件小事儿
  17. 《手Q Android线程死锁监控与自动化分析实践》
  18. 认识蜂鸣器和声音奥秘
  19. 【智能商务】学习财务分析,看这10张思维导图就够啦
  20. 分布式与集群的区别 .

热门文章

  1. 用AI帮助小学一年级记住常用字
  2. Begin at the Beginning
  3. 彻底解决全界面多次点击Button的问题
  4. 202309读书笔记|《野性之美:非洲野生动物初窥》——走进自然界的野性之美
  5. 【Java设计模式】迪米特法则的详细介绍
  6. 产品设计体会(4015)我与本书的局限性
  7. 尤达表达式_研究生院:“做……还是不做。 没有尝试” –尤达
  8. 刘强东内部会上痛斥高管:人浮于事、拉帮结派
  9. java dag_[转] DAG算法在hadoop中的应用
  10. 【MySQ必知必会】MySQL 是怎么存储数据的?