的计算
最后更新于:2022年6月25日 下午
理论基础: 参考潘承洞《数论基础》以及论文包.zip
另一方面,显然我们有
我们知道一个数
设
若
注意到上式中
的计算公式
取上面
因此问题最终转化成求 。它可以利用
至此问题貌似就这么解决了。但是由于这个递归会使得程序效率大大降低,因此需要一些预处理操作。
- 若
则 - 给定一个小整数 M,预处理出
,其中 则
lehmer 计算公式
我自己写的代码没有上面的快,两种计算各有优势
令
即:
注意到
,所以最后一个式子可以用下式求,最后计算复杂度在于
稳定简洁的 DP 做法
我们令
若
,则说明 不能被前 个素数整除是第 个素数。 我们需要的是
上述做法的时间复杂度为
这个骚方法还目前还没有找到其它的应用 0.0
主要还没法对它用树状数组
求第 n 个素数的方法
- 根据概率分布找到大致界限
- 再牛顿梯度法(或者二分查找)使得
- 素数判断递减
直到 为素数 - 参考这里
计算太慢了,需要优化
我们知道,若
注意到上式中
我们之前的操作本质是递归让
现在我们来直接计算得到我们的答案。
符号约定
取定整数 isp[], p[], mu[], pi[]
,对 树状数组
)维护(注意到这需要
做完上面的预处理后,我们发现
可以直接计算了。
直接计算
在本博文的最开始有:
但是最右边本质上有很多项,所以直接算,其实复杂度特别高。
我们还有递归公式:
所以我们约定:对于节点
- 原始节点:
- 特殊节点:
就不再分解。这也等价于说 如果
以前设置
,但是后来发现没必要, 就挺好。
但是我们可以避免很多计算来提高效率。于是我们有下列一系列的操作
,则 为素数 ,且此时 (若 为合数,则 矛盾) 时, 时,
由此对 分段计算
由限制关系式,我们化简
也可以用 的式子求,只是效率不高。
中 ,即可以直接求。
当然了还可以继续细化,但是我嫌麻烦就不想再细化了!
也就是现在的核心就是树状数组分段维护数据,然后每一段的总值要用数组存起来就好了。然后用这个数据结果计算
,然后就大功告成了 0.0 用
计算 ,还是用 计算 ,这是一个问题。 用树状数组维护的时候会有一个很大的问题就是:求和式中 每此动
整个维护就要从 重新维护一次很麻烦。这个问题没解决所以我不想写代码。 想把
的所有可能的值单调递增排列但是又不现实。
第 n 个素数
做法依赖于
的计算
素数定理( 这里就不证了)
从而我们知道:
求解
- 预处理小于
的素数 - 初始值
- 牛顿梯度法
我们可以在不求出 不超过
这是我们关心的结果- 对于一般的
借助自然数方幂和快速算法也可以求
:最小素因子大于 且不超过 的数的 次方和
的递推公式
和 的关系
若
其实我们还可以,类似于