51nod 1226 构造质数

博客探讨如何求[L,R]区间内能表示为x^4-y^4/x^3+y^3形式的素数。通过分析,发现解的形式为2x^2+2x+1,并提出了两种算法:一是优化后的暴力检查,二是利用二次剩余性质进行筛选。算法二通过优化筛法,提高了效率,解决了可能的TLE问题。" 133504157,7337247,机器学习模型训练与效果评估,"['机器学习', '模型评估', '数据科学', 'Python', 'Java']

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

题意

[L,R] 中有多少素数能写成 x4y4x3+y3 的形式。

约定:L,R1013

分析

考虑把 xy 的最大公约数提出来,设为 d,把两数写为 dxdy ((x,y)=1),设有素数 p 满足条件,尝试化简原式,:

p(x3+y3)=d(x4y4)

因式分解,可以得到:

p(x2xy+y2)=d(xy)(x2+y2)

显然,因子 p 应该在 (x2+y2) 里。另一方面,因为 (x,y)=1,所以有 (xy,x2xy+y2)=1,所以只能有 xy=1。那么我们继续化简,得到:

p(x2+x+1)=d(2x2+2x+1)

因为 (x2+x+1,2x2+2x+1)=1,所以我们可以得到:

{p=2x2+2x+1d=x2+x+1

注意到这里的 d 取值是自由的,所以原问题相当于统计有多少形如 2x2+2x+1 的质数。

算法一

考虑到可能成为解的答案只有 O(R) 个,考虑把它们取出来逐个check。。。可过吗?

答案是。。。过不了,不过可以稍稍优化一下,暴力算算知道可能成为答案的解只有 20W 个多一点,那么每隔 500 个取出来一个数,打一张表,询问的时候查表 + 暴力就能过了。

算法二

打表当然不是正解辣!考虑高端解法。

首先如果你稍稍用心的话,就会发现形如 2x2+2x+1(以下记为 f(x))一定不会被 2 整除,如果更细心一点的话,又能发现 f(x) 不会被 37 整除…事实上,这样的素数还是挺多的。

考虑怎样的素数 p 可以成为 f(x) 的约数,这实际上是一个同余方程的样子:

2x2+2x+10modp

那么解这个方程,得到:

1±12modp

这样可以发现,能‘筛掉’这些 f(x) 或成为答案的素数 p 的特点:p1 是 模 p 的二次剩余。并且,只有当 xmodp 取到某两个特定的值的时候,才会有 p|f(x)

因为不难验证,如果 x=x0f(x)0modp 的解,那么 x=px01 也是,这说明,最小的两个 f(x)0modp 的解分别是 >p2<p2 的。

下面考虑这样一种算法:

把所有 f(x)Rf(x) 取出来,列成一张表 {ai},我们从前向后,用小的 ai 去除大的 aj

具体地,我们从 i=1 开始枚举每个 ai,向后找到它可以整除的所有 aj,把 aj 里面的所有 ai 因子除干净。

我们断言,按这样的算法处理,枚举到每个 ai 的时候,ai 一定是一个素数或 1

证明:

先奠基,首先 a1 是一个素数。

ai 是一个合数,且 ai 中含有两个不同的质因子时,等价于:

存在不同的两质数 p, q 使得 i

f(x)0modp

f(x)0modq

的最小正整数解。(如果不是的话,ai 会被之前的 aj 筛掉)

那么我们有 i<p2i<q2,所以:

2i2+2i+1<pq

矛盾。

因此,每个 i 只可能是最多一个 p 的同余方程 f(x)0modp 的最小解。

类似上文的思路,还可以证明如果这样的 p 存在,那么 aip 的次数最大是 1

如果 ai 是素数,我们又会用它去筛之后的 aj,根据循环不变式的那一套理论,这个命题应该是成立的。

答案怎么统计呢?如果枚举到某个 ai 发现 ai=f(i)aiL 时,就给答案加 1 嘛。

我们设有 mRf(x),按照上文描述,算法的复杂度是 O(m2) 的,可能还会 TLE,有优化的余地吗?

注意到 f(x)0modp 当且仅当 f(x%p)0modp,而<p 的两个解分别是 ipi1,所以我们根据 aii 可以知道它应该去筛哪些数,加上这个优化就可以过了。

复杂度?总比 O(mlogm) 快,更精确的分析就不会了。

添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值