神仙东西,考到了学习一下。
条件:$f(x)$为积性函数,$f(p)$低阶多项式,$f(p^k)$可快速求
为啥f(p)要求是个低阶多项式?因为这个要求是完全积性的。
然后可以去预处理一些东西
g[i][j]表示[1,i]中数为质数或low>p[j]的函数和(为f(p)低阶多项式形式)
考虑转移
$$g_{i,j}=g_{i,j-1}-f(p_j)*(g_{i/p_j,j-1}-g_{p_{j-1},j-1})$$
注意的是这个g求的是所有质数的答案,并且容易发现当$j>sqrt{i}$时答案不变
这样复杂度就有保证了。
然后剩下的是算合数的贡献(先把1去掉最后加上)
设S[i][j]表示[1,i]中low>=p[j]的函数和
然后类似上面的,不过因为是积性而非完全积性,需要枚举最低位是谁。
$$S(n,j)=g(n)-sum_{i=1}^{j-1}f(p_i)+sum_{k>=j}sum_{c}F(p_k^c)S(n/p_k^c,k+1)+F(P_k^{c+1})$$
ans=S(n,1)