BZOJ 4805 尤拉函式求和 杜教篩

2022-05-08 12:45:07 字數 891 閱讀 2564

複習一下杜教篩(所有除法向下取整)

公式:$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,\epsilon(x)=[x==1]$

(1) $(\mu*i)(i)=\epsilon(i)$

(2) $(\varphi*i)(i)=id(i)$

(3) $(id*\mu)(i)=\varphi(i)$           

#include#define maxn 10000004

#define ll long long

#define m 1000002

using namespace std;

void setio(string s)

int cnt;

bool vis[maxn];

int prime[maxn], phi[maxn];

ll sumv[maxn];

ll sum(ll n)

inline void init()

phi[i*prime[j]]=phi[i]*(prime[j]-1);

} }

for(i=1;i<=m;++i) sumv[i]=sumv[i-1]+1ll*phi[i];

}mapsumphi;

ll get(int n)

return re;

}int main()

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

題意 給定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 n...

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 ...