zoukankan      html  css  js  c++  java
  • bzoj 4407 于神之怒加强版

    LINK:于神之怒加强版

    这道题用到了几个小技巧。

    avatar

    T组数据,(Tleq 2000) (n,mleq 5000000)

    简单推导一下可以得出(sum_{w=1}^nsum_{d|w}mu(d)(frac{w}{d})^kfrac{n}{w}frac{m}{w})

    整除分块考虑前面预处理 不要脸的做法是 直接调和级数 加一点小优化(mu(x))为0的时候没必要枚举,发现可以卡过。

    考虑直接线性筛 我们只有对于质数p才快速幂 然后对于p i互质 直接相乘 不互质的时候可以发现要多乘一个(p^k)

    可以轻松通过。

    const int MAXN=5000010;
    int n,m,top,T,k,maxx;
    int mu[MAXN],p[MAXN],v[MAXN];
    ll f[MAXN],w[MAXN];
    inline ll ksm(ll b,int p)
    {
    	ll cnt=1;
    	while(p)
    	{
    		if(p&1)cnt=cnt*b%mod;
    		b=b*b%mod;p=p>>1;
    	}
    	return cnt;
    }
    inline void prepare()
    {
    	mu[1]=1;f[1]=1;
    	rep(2,maxx,i)
    	{
    		if(!v[i]){p[++top]=v[i]=i;mu[i]=-1;w[i]=ksm(i,k);f[i]=w[i]-1;}
    		rep(1,top,j)
    		{
    			if(maxx/i<p[j])break;
    			v[i*p[j]]=p[j];
    			if(v[i]==p[j]){f[i*p[j]]=f[i]*w[p[j]]%mod;break;}
    			mu[i*p[j]]=-mu[i];
    			f[i*p[j]]=f[i]*f[p[j]]%mod;
    		}
    	}
    	rep(1,maxx,i)f[i]=(f[i]+f[i-1])%mod;
    }
    int main()
    {
    	freopen("1.in","r",stdin);
    	get(T);get(k);maxx=5000000;prepare();
    	while(T--)
    	{
    		get(n);get(m);
    		if(n>m)swap(n,m);
    		ll w1,w2,ww,ans=0;
    		for(int i=1;i<=n;i=ww+1)
    		{
    			w1=n/i;w2=m/i;
    			ww=min(n/w1,m/w2);
    			ans=(ans+(f[ww]-f[i-1])*w1%mod*w2%mod)%mod;
    		}
    		putl((ans+mod)%mod);
    	}
    	return 0;
    }
    
  • 相关阅读:
    spring事务管理
    spring中的prop、set、list、map
    SimpleMappingExceptionResolver
    基于注解的任务调度
    <aop:aspectj-autoproxy />
    <mvc:annotation-driven />与<context:annotation-config/>
    发布Dubbo服务介绍
    zookeeper安装介绍
    Dubbo介绍
    SpringBoot操作使用Spring-Data-Jpa
  • 原文地址:https://www.cnblogs.com/chdy/p/12541964.html
Copyright © 2011-2022 走看看