• [武汉加油] 如何用杜教筛筛约数个数


    本来考试遇到一个类似的,结果没动脑子直接上的杜教筛。。

    g函数取(mu)函数就行了,f就是约数个数函数(相当于(1*1)),套用杜教筛公式就好啦,但貌似(mu)也要杜教筛..

    注意(displaystyle sum_{i=1}^{n}(f*g)(i)=sum_{i=1}^{n}(1*1* mu)(i)=sum_{i=1}^{n}(1*e)(i)=n)就可以啦

    LL suan1(LL n)//mu
    {
    	if(n<=M)return mu[n];
    	if(smu.count(n))return smu[n];
    	LL ans=1;
    	for(LL l=2,r;l<=n;l=r+1)r=n/(n/l),ans-=(r-l+1)*suan1(n/l);
    	return smu[n]=ans;
    }
    LL suan2(LL n)//d
    {
    	if(n<=M)return d[n];
    	if(sd.count(n))return sd[n];
    	LL res=n;
    	for(LL l=2,r,las=1,now;l<=n;l=r+1)
    	{
    		r=n/(n/l);
    		now=suan1(r);
    		res-=(now-las)*suan2(n/l);
    		las=now;
    	}
    	return sd[n]=res;
    }
    
  • 相关阅读:
    中国式沟通
    10 表连接优化
    09 优化数据访问
    07 SQL优化技术
    06 执行计划
    04 系统和对象统计信息
    03 找出性能问题
    02 key concept
    Xpert 调优
    JavaWeb_常用功能_01_文件上传
  • 原文地址:https://www.cnblogs.com/wljss/p/12312053.html
Copyright © 2020-2023  润新知