懵逼烏斯反演裸題
畫完柿子只要預處理s(i)=sigema(d|i)d u(i/d)*d^k
線性篩它一手
i%prime[j]==0,我們換種表示方法,設i=x*p^q,對於s[i],有貢獻的d,只能具有q或q-1個p,而對於i*prime[j]也就是x*p^(q+1)來說,有貢獻的d是具有q+1或q個p的。而貢獻,是d^k。那麼前面的q對應後面的q+1,前面的q-1對應後面的q,要乘上的就是prime[j]^k
沒取模好還掛了一次。。
#include#include#include
#include
#include
#include
using
namespace
std;
typedef
long
long
ll;const
int mod=1e9+7
;int
k;int quick_pow(int
a)
return
ret;
}int pr,prime[5000010],u[5000010],mi[5000010],s[5000010
];bool v[5000010
];void
get_prime()
for(int j=1;j<=pr&&i*prime[j]<=5000000;j++)
else u[i*prime[j]]=-u[i],s[i*prime[j]]=(ll)s[i]*s[prime[j]]%mod;}}
for(int i=2;i<=5000000;i++)s[i]=(s[i]+s[i-1])%mod;
}int
main()
printf(
"%d\n
",ans);
}return0;
}
bzoj 4407 於神之怒加強版
time limit 80 sec memory limit 512 mb submit 624 solved 297 submit status discuss 給下n,m,k.求 輸入有多組資料,輸入資料的第一行兩個正整數t,k,代表有t組資料,k的意義如上所示,下面第二行到第t 1行,每行為兩...
bzoj 4407 於神之怒加強版
給下n,m,k.求 輸入有多組資料,輸入資料的第一行兩個正整數t,k,代表有t組資料,k的意義如上所示,下面第二行到第t 1行,每行為兩個正整數n,m,其意義如上式所示。如題1 2 3 3 20感覺是道比較水的數論題?提個d k隨手莫比烏斯反演一下,再把 跟d k放在一起,預處理出來就好了。瑪雅,1...
bzoj4407 於神之怒加強版
傳送門 題解 推一波公式 你還是需要前置技能 那麼好像可以o tnlogn 直接暴力啊!當然是兩遍根號分塊變成o tn 啊 好訊息過不去。當你莫比烏斯反演發現複雜度不對的話怎麼辦?繼續瞎 化簡!令x pd,那麼有 哎這個式子看起來很和善 後面那個好像是積性函式 逃 那麼線性篩就行啦!問題是怎麼篩呢。...