日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

51nod1584加权约数和

發(fā)布時間:2023/11/30 编程问答 25 豆豆
生活随笔 收集整理的這篇文章主要介紹了 51nod1584加权约数和 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.

題目大意:

求:
\[ \sum_{i-1}^n\sum_{j=1}^nmax(i,j)\sigma(i*j) \]

題解

對于這個\(\max\),套路的把它轉(zhuǎn)化成:
\[ 2*\sum_{i=1}^n\sum_{j=1}^ii*\sigma(i*j)-\sum_{i=1}^n i*\sigma(i*i) \]
對于前面的部分,我們可以:
\[ \sum_{i=1}^{n}\sum_{j=1}^ii\sum_{a|i}\sum_{b|j}a*\frac{j}{b}[(a,b)==1] \]

\[ \sum_{i=1}^{n}i\sum_{j=i}^n\sum_{a|i}\sum_{b|j}a*\frac{j}{b}\sum_{d|(i,j)}\mu(d) \]

\[ \sum_{d=1}^n\mu(d)\sum_{i=1}^{\frac{n}ozvdkddzhkzd}i*d\sum_{a|i}a*d\sum_{j=1}^{i}\sum_{b|j}\frac{j}{b} \]

\[ \sum_{d=1}^n\mu(d)d^2\sum_{i=1}^{\frac{n}ozvdkddzhkzd}i\sum_{a|i}a\sum_{j=1}^i\sum_{b|j}\frac{j}{b} \]

\[ \sum_{d=1}^n\mu(d)d^2\sum_{i=1}^{\frac{n}ozvdkddzhkzd}g_i \]

\[ \sum_{D=1}^n\sum_{d|D}\mu(d)d^2G_{D/d} \]

\[ g_n=n*\sigma_n*\sum_{i=1}^n \sigma_i \]

這個\(g\)數(shù)組就可以線性預(yù)處理了。

后面的部分可以線性篩,姿勢++。

代碼

#include<bits/stdc++.h> #define N 1000009 using namespace std; typedef long long ll; const int maxn=1000000; const int mod=1000000007; bool vis[N]; int prime[N]; ll mu[N],md[N],mdp[N],ans[N],g[N],sum[N],f[N]; ll sig[N],sig2[N]; inline ll rd(){ll x=0;char c=getchar();bool f=0;while(!isdigit(c)){if(c=='-')f=1;c=getchar();}while(isdigit(c)){x=(x<<1)+(x<<3)+(c^48);c=getchar();}return f?-x:x; } inline void MOD(ll &x){x=x>=mod?x-mod:x;} inline void prework(int n){sig[1]=mu[1]=sig2[1]=md[1]=mdp[1]=1;for(int i=2;i<=n;++i){//cout<<i<<" "<<md[i]<<" "<<mdp[i]<<endl;if(!vis[i]){prime[++prime[0]]=i;md[i]=mdp[i]=i;mu[i]=mod-1;sig[i]=i+1;sig2[i]=(1ll*i*i%mod+i+1)%mod;}for(int j=1;j<=prime[0]&&(i*prime[j])<=n;++j){vis[i*prime[j]]=1;if(i%prime[j]==0){mu[i*prime[j]]=0;md[i*prime[j]]=prime[j];mdp[i*prime[j]]=mdp[i]*prime[j];sig[i*prime[j]]=(sig[i]+1ll*prime[j]*mdp[i]%mod*sig[i/mdp[i]]%mod)%mod;sig2[i*prime[j]]=sig2[i]+(1ll*mdp[i]*mdp[i]%mod*md[i]%mod+1ll*mdp[i]*mdp[i]%mod*md[i]%mod*md[i]%mod)*sig2[i/mdp[i]]%mod;sig2[i*prime[j]]%=mod;break;}mu[i*prime[j]]=mod-mu[i];sig[i*prime[j]]=sig[i]*sig[prime[j]]%mod;md[i*prime[j]]=mdp[i*prime[j]]=prime[j];sig2[i*prime[j]]=sig2[i]*sig2[prime[j]]%mod;}}for(int i=1;i<=n;++i)MOD(sum[i]=sum[i-1]+sig[i]);for(int i=1;i<=n;++i){g[i]=1ll*sig[i]*i%mod*sum[i]%mod;MOD(sig2[i]=sig2[i-1]+sig2[i]*i%mod);for(int j=i;j<=n;j+=i)MOD(f[j]+=g[i]*mu[j/i]%mod*(j/i)%mod*(j/i)%mod);MOD(f[i]+=f[i-1]);ans[i]=(f[i]*2-sig2[i]+mod)%mod;} } int main(){prework(maxn);int T=rd(),ct=0;while(T--){int x=rd();ct++;printf("Case #%d: %lld\n",ct,ans[x]);}return 0; }

轉(zhuǎn)載于:https://www.cnblogs.com/ZH-comld/p/11031526.html

總結(jié)

以上是生活随笔為你收集整理的51nod1584加权约数和的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯,歡迎將生活随笔推薦給好友。