博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
loj#572. 「LibreOJ Round #11」Misaka Network 与求和
阅读量:4609 次
发布时间:2019-06-09

本文共 2121 字,大约阅读时间需要 7 分钟。

胡策题,迫使懒得点技能树选手学算法。。。

至少杜教和min_25会了

不想写小结啊啊啊啊

那么对于这个题先上个莫反套路

然后用杜教乘个I把f*u给消掉,发现h就是f,这个可以用类似min_25的思想搞。。。

#include
#include
#include
#include
#include
#include
#include
#include
using namespace std;typedef long long LL;typedef unsigned int uint;const int _=1e2;const int maxs=1e5+_;namespace MIN_25{ int N,sqN; uint quick_pow(uint A,int p) { uint ret=1; while(p!=0) { if(p%2==1)ret=ret*A; A=A*A;p/=2; } return ret; } int pr,prime[maxs];uint kp[maxs]; bool v[maxs]; void getprime(int K) { for(int i=2;i<=sqN;i++) { if(v[i]==false)prime[++pr]=i,kp[pr]=quick_pow(i,K); for(int j=1;j<=pr&&i*prime[j]<=sqN;j++) { v[i*prime[j]]=true; if(i%prime[j]==0)break; } } } int ulen,u[2*maxs],id1[maxs],id2[maxs]; int ID(int x){ return (x<=sqN)?id1[x]:id2[N/x];} uint g[2*maxs];//质数个数前缀和 void getg() { ulen=0; for(int i=1;i<=N;i=N/(N/i)+1) { u[++ulen]=N/i; if(u[ulen]<=sqN)id1[u[ulen]]=ulen; else id2[N/u[ulen]]=ulen; g[ulen]=u[ulen]-1; } for(int j=1;j<=pr;j++) for(int i=1;i<=ulen&&(LL)prime[j]*prime[j]<=u[i];i++) g[i]-=g[ID(u[i]/prime[j])]-(j-1); } uint S(int n,int j) { if(n<=1||prime[j]>n)return 0; uint sum=0; for(int i=j;(LL)prime[i]*prime[i]<=n&&i<=pr;i++) { uint p=prime[i]; for(int q=1;(LL)p*prime[i]<=n;q++) { sum+=S(n/p,i+1); sum+=kp[i]*(g[ID(n/p)]-(i-1)); p*=prime[i]; } } if(j==1)sum+=g[ID(n)]; return sum; }}namespace DJ{ int N,sqN; uint mp1[maxs],mp2[maxs]; uint MP(uint x){ return (x<=sqN)?mp1[x]:mp2[N/x];} void upd(int x,uint d) { if(x<=sqN)mp1[x]=d; else mp2[N/x]=d; } uint S(int n) { if(MP(n)!=0)return MP(n); uint ret=MIN_25::S(n,1); int last; for(int i=2;i<=n;i=last+1) { last=n/(n/i); ret-=(last-i+1)*S(n/last); } upd(n,ret); return ret; }}int main(){ int n,K; scanf("%d%d",&n,&K); DJ::N=MIN_25::N=n; DJ::sqN=MIN_25::sqN=int(sqrt(double(n+1))); MIN_25::getprime(K); MIN_25::getg(); uint ans=0,ps=0,ns; int last; for(int i=2;i<=n;i=last+1) { last=n/(n/i); ns=DJ::S(last); ans+=(uint)(n/i)*(n/i)*(ns-ps); ps=ns; } printf("%u\n",ans); return 0;}

 

转载于:https://www.cnblogs.com/AKCqhzdy/p/10679897.html

你可能感兴趣的文章
unshift()与shift()
查看>>
使用 NPOI 、aspose实现execl模板公式计算
查看>>
行为型模式:中介者模式
查看>>
How to Notify Command to evaluate in mvvmlight
查看>>
33. Search in Rotated Sorted Array
查看>>
461. Hamming Distance
查看>>
Python垃圾回收机制详解
查看>>
jquery 编程的最佳实践
查看>>
MeetMe
查看>>
IP报文格式及各字段意义
查看>>
(转载)rabbitmq与springboot的安装与集成
查看>>
C2. Power Transmission (Hard Edition)(线段相交)
查看>>
STM32F0使用LL库实现SHT70通讯
查看>>
Atitit. Xss 漏洞的原理and应用xss木马
查看>>
MySQL源码 数据结构array
查看>>
(文件过多时)删除目录下全部文件
查看>>
T-SQL函数总结
查看>>
python 序列:列表
查看>>
web移动端
查看>>
pythonchallenge闯关 第13题
查看>>