题意
求 [L,R] 中有多少素数能写成 x4−y4x3+y3 的形式。
约定:L,R≤1013
分析
考虑把 x 和
因式分解,可以得到:
显然,因子 p 应该在
因为 (x2+x+1,2x2+2x+1)=1,所以我们可以得到:
注意到这里的 d 取值是自由的,所以原问题相当于统计有多少形如
算法一
考虑到可能成为解的答案只有 O(R‾‾√) 个,考虑把它们取出来逐个check。。。可过吗?
答案是。。。过不了,不过可以稍稍优化一下,暴力算算知道可能成为答案的解只有 20W 个多一点,那么每隔 500 个取出来一个数,打一张表,询问的时候查表 + 暴力就能过了。
算法二
打表当然不是正解辣!考虑高端解法。
首先如果你稍稍用心的话,就会发现形如 2x2+2x+1(以下记为 f(x))一定不会被 2 整除,如果更细心一点的话,又能发现
考虑怎样的素数 p 可以成为
那么解这个方程,得到:
这样可以发现,能‘筛掉’这些 f(x) 或成为答案的素数 p 的特点:
因为不难验证,如果 x=x0 是 f(x)≡0modp 的解,那么 x=p−x0−1 也是,这说明,最小的两个 f(x)≡0modp 的解分别是 >p2 和 <p2 的。
下面考虑这样一种算法:
把所有 f(x)≤R 的 f(x) 取出来,列成一张表 {ai},我们从前向后,用小的 ai 去除大的 aj。
具体地,我们从 i=1 开始枚举每个 ai,向后找到它可以整除的所有 aj,把 aj 里面的所有 ai 因子除干净。
我们断言,按这样的算法处理,枚举到每个 ai 的时候,ai 一定是一个素数或 1。
证明:
先奠基,首先
若 ai 是一个合数,且 ai 中含有两个不同的质因子时,等价于:
存在不同的两质数 p,
和
的最小正整数解。(如果不是的话,ai 会被之前的 aj 筛掉)
那么我们有 i<p2 且 i<q2,所以:
矛盾。
因此,每个 i 只可能是最多一个
类似上文的思路,还可以证明如果这样的 p 存在,那么
如果 ai 是素数,我们又会用它去筛之后的 aj,根据循环不变式的那一套理论,这个命题应该是成立的。
答案怎么统计呢?如果枚举到某个 ai 发现 ai=f(i) 且 ai≥L 时,就给答案加 1 嘛。
我们设有
注意到 f(x)≡0modp 当且仅当 f(x%p)≡0modp,而<p 的两个解分别是 i 和
复杂度?总比