bzoj4805 尤拉函式求和(杜教篩)

2021-10-24 02:07:50 字數 1295 閱讀 5402

題意:

給定n,求尤拉函式前n項和。

資料範圍:n<=2e9

解法:尤拉函式性質:∑d∣

nφ(d

)=

n\sum_φ(d)=n

∑d∣n​φ

(d)=

n轉化為卷積形式:φ∗i

=i

dφ*i=id

φ∗i=id

杜教篩遞推式:g(1

)s(n

)=∑i

=1n(

f∗g)

(i)−

∑i=2

ng(i

)s(⌊

ni⌋)

g(1)s(n)=\sum_^n(f*g)(i)-\sum_^ng(i)s(\lfloor \frac ni \rfloor)

g(1)s(

n)=∑

i=1n

​(f∗

g)(i

)−∑i

=2n​

g(i)

s(⌊i

n​⌋)

令f =φ

,g=i

f=φ,g=i

f=φ,g=

i,上式變為:s(n

)=n∗

(n+1

)2−∑

i=2n

s(⌊n

i⌋

)s(n)=\frac -\sum_^ns(\lfloor \frac ni \rfloor)

s(n)=2

n∗(n

+1)​

−∑i=

2n​s

(⌊in

​⌋)前半部分o(1)計算,後半部分整除分塊遞迴計算。

code:

#include

using

namespace std;

#define ll long long

const

int maxm=

1e6+5;

ll phi[maxm]

;ll notprime[maxm]

;ll prime[maxm]

,cnt;

ll sum_phi[maxm]

;void

init()

for(

int j=

0;jfor(

int i=

1;imapmp_phi;

ll s_phi

(ll x)

return mp_phi[x]

=ans;

}signed

main()

BZOJ 4805 尤拉函式求和 杜教篩

複習一下杜教篩 所有除法向下取整 公式 s n frac f g i sum g i s frac 應用時一定要滿足 sum f g i 要能夠快速求出,且 f,g 都為積性函式.其中 f g i sum 就是 f,g 的迪利克雷卷積 常見的變換 證明就不給了 一些定義 i x 1,id x x,e...

BZOJ4805 尤拉函式求和

bzoj4805 尤拉函式求和 給出乙個數字n,求sigma phi i 1 i n 正整數n。n 2 10 9 輸出答案。1032 題目要求 sum n varphi i 這。不是很顯然乙個線性篩然後字首和就沒了麼?水題?並不!n leq 2 times 10 9 直接 tle 到 怎麼辦?沒事,...

BZOJ4805 尤拉函式求和

題目大意 對於給定的 n n leq2 times10 9 求 sum n varphi i 思路 設 s n sum n varphi i 因為 sum varphi d n s n sum n i sum 13const int n 1587402,m 120256 14 bool vis n ...