複習一下杜教篩(所有除法向下取整)
公式:$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 ...