杜教筛刷题总结
写在前面:
其实只有一道题
2020.01.01update:博客锅了非常抱歉,感谢sbskyh&tdcp指出
DZY Loves Math IV
$n$很小可以考虑枚举$1$到$n$
对于一个枚举出来的$n$
考虑把$n$拆为$x*y$
其中$x$为$n$的每个质因子的1次方的乘积,$y=\frac{n}{x}$
$S(n,m)=\sum\limits_{i=1}^{m}\varphi{(n*i)}$
$S(n,m)=y*\sum\limits_{i=1}^{m}\varphi{(\frac{x}{(x,i)})}*\varphi{(i)}*(x,i)$
$S(n,m)=y*\sum\limits_{i=1}^{m}\varphi{(\frac{x}{(x,i)})}*\varphi{(i)}\sum\limits_{j|(x,i)}\varphi{(j)}$
$S(n,m)=y*\sum\limits_{i=1}^{m}\varphi{(i)}\sum\limits_{j|(x,i)}\varphi{(\frac{x}{j})}$
$S(n,m)=y*\sum\limits_{j|x}\varphi{(\frac{x}{j})}\sum\limits_{i=1}^{\lfloor \frac{m}{j} \rfloor}\varphi{(i*j)}$
$S(n,m)=y*\sum\limits_{j|x}\varphi{(\frac{x}{j})}*S(j,\lfloor \frac{m}{j} \rfloor)$
递归解决即可
递归边界:
1>$n==1$杜教筛求$ans=\sum\limits_{i=1}^{m}\varphi{(i)}$
2>$m<=1\ ans=m*\varphi{(n)}$