zoukankan      html  css  js  c++  java
  • bzoj 2693 jzptab

    LINK:[jzptab]

    T组数据 (n,mleq 1e7) mod=1e8+9; 求(sum_{i=1}^nsum_{j=1}^mLCM(i,j))

    本来不打算写blog的 写完后交了两发 T的飞。

    翻了两篇题解才知道自己的复杂度多ln了然后过不去。

    可以简单的把式子化成(sum_{w=1}^{n}wsum{d|T}mu(d)dcdot sum(frac{n}{T})cdot sum(frac{m}{T}))

    其中sum(x)=1+2+3+...+x; 后面显然可以O(1)求。

    整个式子考虑整除分块 考虑前面的东西怎么预处理出来前缀和。

    设f(x) 表示 (xcdot sum_{d|x}mu(d)d)

    我们有一个公式是 (sum_{d|x}mu(d)frac{x}{d}=phi(x)) 和上面那个很相似 但是没乱用。

    可以发现对于f(x) 我们枚举i进行调和级数的赋值这样复杂度是In的 没想到1e7没跑过去 可能也有常数的问题。

    所以我们只能线性处理f(x)了。f(x)是一个积性函数 因为其为积性函数点积积性函数点积积性函数 或者我们对后半部分线性筛 因为最后还有求前缀和的时候再乘上x也不迟。

    (sum_{d|x}mu(d)d)考虑这个如何线性筛 可以发现很显然。对于积性函数的我们通常筛法 利用积性函数的性质 这个当p|x的时候 显然f(p*x)=f(x);

    我之所以说这么多 是有的时候 1e7是过不了一个log的 所以这个时候一定要线性。

    int n,m,top,T,maxx;
    int mu[MAXN],p[MAXN],v[MAXN];
    ll f[MAXN];
    inline void prepare()
    {
    	mu[1]=1;f[1]=1;
    	rep(2,maxx,i)
    	{
    		if(!v[i]){p[++top]=v[i]=i;mu[i]=-1;f[i]=1-i;}
    		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];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]*i+f[i-1])%mod;
    }
    inline ll sum(int x){return (ll)(1+x)*x/2%mod;}
    int main()
    {
    	freopen("1.in","r",stdin);
    	get(T);maxx=10000000;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])*sum(w1)%mod*sum(w2)%mod)%mod;
    		}
    		putl((ans+mod)%mod);
    	}
    	return 0;
    }
    
  • 相关阅读:
    iot 表索引dump《2》
    heap表和iot表排序规则不同
    Cannot complete the install because one or more required items could not be found.
    iot表输出按主键列排序,heap表不是
    iot 表主键存放所有数据,且按数据插入顺序排序
    iot表和heap表排序规则不同
    org.eclipse.graphiti.ui.editor.DiagramEditorInput.
    Oracle 排序规则
    perl 异步超时 打印错误
    14.6.3 Grouping DML Operations with Transactions 组DML操作
  • 原文地址:https://www.cnblogs.com/chdy/p/12541742.html
Copyright © 2011-2022 走看看