ICode9

精准搜索请尝试: 精确搜索
首页 > 其他分享> 文章详细

[突发奇想]重推min_25

2021-02-07 20:04:25  阅读:148  来源: 互联网

标签:25 right min sum 重推 合数 le 质数 left


牢骚和推导

忘记 \(\tt min\_25\) 了,重新推一遍,顺便理清思路。

对于一个函数 \(f(x)\),它是一个积性函数,并且 \(f(p),f(p^k)\) 都比较好得到,现在问 \(F(i)=\sum_{i=1}^nf(i)\).

对于 \(F\),我们分质数、合数与 \(1\) 三种情况考虑,就有

\[F(n)=\sum_{i=1}^{p_i\le n}f(p_i)+\sum_{x=2,x\notin \Bbb P}^{n}f(x)+f(1) \]

对于合数部分,我们改写一下,有

\[\begin{aligned} &\sum_{x=2 \\x\notin \Bbb P}^{n}f(x) \\ =&\sum_{i=1}^{p_i\le n}\sum_{k=1}^{p_i^k\le n}f(p_i^k)\left( \sum_{x=1,\text{minp}(x)>p_i}^{\left\lfloor{n\over p_i^k}\right\rfloor}f(x)+[k\neq1]f(1) \right) \\ \end{aligned} \]

然后我们定义 \(S(n,j)\) 表示所有 \((1,n]\) 以内的,最小质因数大于 \(p_j\) 的数的函数值之和,那么就有

对于这个 \(S\) 的求值,我们也可以分成质数、合数两个部分考虑,定义 \(G(i)\) 表示 \([1,i]\) 中质数的函数值之和,那么有

\[\begin{aligned} S(n,j)&=G(n)-G(j)+\sum_{i=j+1}^{p_i\le n}\sum_{k=1}^{p_i^k\le n}f(p_i^k)\left( \sum_{x=1,\text{minp}(x)>p_i}^{\left\lfloor{n\over p_i^k}\right\rfloor}f(x)+[k\neq1]f(1) \right) \\ &=G(n)-G(j)+\sum_{i=j+1}^{p_i\le n}\sum_{k=1}^{p_i^k\le n}f(p_i^k)\left( S\left(\left\lfloor{n\over p_i^k}\right\rfloor,i\right)+[k\neq1]f(1) \right) \\ \end{aligned} \]

这个东西就可以递归做了,但是还有一个问题:这个 \(G\) 怎么处理?

定义 \(g(i,j)\) 表示 \([2,i]\) 以内的质数或者最小质因数大于 \(p_i\) 的数的函数值之和,不难发现,有边界情况

\[g(i,j)= \begin{cases} \sum_{k=2}^if(k) &j=0 \\ g(i-1,j) &i<p_j^2 \\ g(i,j-1)-f(p_j)\left(g\left(\left\lfloor{i\over p_j}\right\rfloor,j-1\right)-\sum_{k=1}^{k<j}f(p_k)\right) &i\ge p_j^2 \end{cases} \]

这个 \(g()\) 的递推过程,我们可以考虑成每一次筛,其实就是将当前最小的质数所拥有的一个合数筛掉,但是要注意筛这个质数的时候可能会把前面的质数重复筛,这个就要重新加上。至于为什么这里是 \(g\left(\left\lfloor{i\over p_j}\right\rfloor,j-1\right)\) 呢?因为我们是从 \(g(i,j-1)\) 中筛掉的,所以自然这里也是 \(j-1\) 了。

然后我们一直推进,直到某个时刻 \(p_j=P\)(\(P\) 是 \(\sqrt n\) 以内最大的质因数)时,就有 \(G(n)=g(n,P)\).

最后实现的时候,每个 \(f()\) 拆出来的单独的一项函数单独用一个 \(g()\) 进行计算,并且注意到这个递推关系是相邻之间的关系,所以只需要开一维数组。

一些感悟

重新推了一遍,还花了比较久的时间,但是重新理了一遍思路。

对于 \(g\),我们实际上只是想要 "质数" 的部分,但是无奈不能一次解决,所以就变成了 "质数以及最大质因数大于 \(p_j\) 的数的函数值之和",然后通过每次将 \(p_j\) 变大,逐一筛去一些以质数为基础的合数,最后得到我们想要的。

对于 \(S\),我们实际上想要的是 \(S(n,0)\),但是无奈这样的数太多了,我们就只好先定义其为 "最小质因数大于 \(p_j\) 的数的函数值之和",然后每次放低要求,最后得到我们想要的。

也就是说,对于 \(g\) 而言,我们实际上每次在筛掉一些数,对于 \(S\),我们每次都在加入一些数。

标签:25,right,min,sum,重推,合数,le,质数,left
来源: https://www.cnblogs.com/Arextre/p/14386459.html

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有