bzoj4916 神犇和蒟蒻 杜教篩

2022-03-07 08:07:42 字數 1585 閱讀 5232

題面:

傳送門一句話,就是讓你求$\mu\left(i^2\right)$以及$\varphi\left(i^2\right)$的字首和

思路:

第一問,瞪了一會兒恍然大悟:這不就是1嗎......

因為對於$\mu\left(i^2\right)$,$i^2=i\ast i$,那麼$\mu\left(i^2\right)$在$i\neq1$的時候值都是0

所以第一問輸出1就好了......

接下來看第二問

這一問中解決$\varphi\left(i^2\right)$是關鍵,因為這東西是個積性函式,可以套進杜教篩裡面,而一旦進了杜教篩這題就解決了

當前的關鍵,是找到杜教篩套路式子中的$g\left(x\right)

發現,當$n$變成$n^2$的時候,右邊的每乙個質數$p$的指數都上公升了$a_p$

也就是說,$\varphi\left(i^2\right)=\varphi\left(i\right)\ast i$

美!滋!滋!

所以我們只要設$g\left(x\right)=x$,然後套用杜教篩套路:

$ g\left(1\right)s\left(n\right)=\sum_^\left(g\ast f\right)\left(i\right)-\sum_^g\left(i\right)s\left(\frac ni\right) $

此時g和f函式的卷積等於id

$ s\left(n\right)=\sum_^i-\sum^is\left(\frac ni\right) $

然後就遞迴記憶化ac

code:

1 #include2 #include3 #include4 #include5 #include6

#define ll long long

7 ll mod=1e9+7,inv6=166666668;8

using

namespace

std;

9inline ll read()

15while(ch>='

0'&&ch<='

9') re=(re<<1)+(re<<3)+ch-'

0',ch=getchar();

16return re*flag;17}

18 ll tot,pri[2000010],phi[2000010];bool vis[2000010]=;

19void

init()

25for(j=1;j<=tot;j++)

32 phi[k]=phi[i]*phi[pri[j]]%mod;33}

34}35for(i=1;i<=2000000;i++) phi[i]=(i*phi[i]%mod+phi[i-1])%mod;36}

37 mapm;

38 ll sum(ll l,ll r)

39 ll sum2(ll x)

40ll s(ll x)

48return m[x]=(re+mod)%mod;49}

50int

main()

bzoj 4916 神犇和蒟蒻 杜教篩

求a ni 1 i 2 和b ni 1 i2 n 1e9,答案模1e9 7 md第一問是什麼鬼?第二問想到是杜教篩 因為不會洲閣篩 但是沒想到用哪個函式和f卷起來。其實考慮到f d d d 要把常數消掉的話,最好就是把f和g d d 卷起來,然後就可以得到 i 1n j if j g ij i 1n...

bzoj4916神犇和蒟蒻 杜教篩

題意 求sigma mu i 2 和sigma phi i 2 這題以前剛學杜教篩的時候就想過沒想到真的有人考出來了 mu的那個明顯怎麼都是1.phi的那個拆開就是phi i i 線性求的時候順便搞一下然後就和求sigma phi i 沒什麼區別了。include include include d...

BZOJ4916 神犇和蒟蒻 杜教篩

求 sum n mu i 2 sum n phi i 2 n leqslant 10 9 zz的我看第一問看了10min。感覺自己智商被侮辱了qwq 基礎太垃圾qwq。算了正經點吧,第一問答案肯定是 1 還不明白的重學反演吧。第二問其實也不難 定理 phi i 2 i phi i sum phi d...