表达式

本文详细解析了一类涉及费马小定理、同余问题和二次展开式的数学表达式求值问题,通过巧妙转换和严谨证明,提供了一种高效的O(n)算法解决方案。

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

安利一下洛谷博客
【问题描述】

求表达式的值。
∑ i = 1 k p i 2 p − 1 m o d      p 2 \sum_{i=1}^{kp} i^{2p-1} \mod\ p^{2} i=1kpi2p1mod p2,其中p为素数。

【输入描述】

一行两个整数k,p。

【输出描述】

一行一个整数表示答案。

【样例】

样例输入

1 3

样例输出

6

喜欢这种题目了,简单明了,言简意赅,通俗易懂,清晰可见,一目了然,不拐弯抹角。。。

但是

真的不好做啊 。。。
此题用到了费马小定理,同余问题,二次展开式(实质上就是 ( a + b ) n = (a+b)^{n}= (a+b)n=一大堆乱七八糟的东西,用了一个如此高级的东西),还有≡(这个叫恒等于,蒟蒻第一次见还以为是全等。。),这道题充分的发挥了人类的智慧,把 ∑ \sum 用的淋漓精致,反正我考试的时候肯定想不到

现在开始动工!

首先,我先把结论抛给大家
∑ i = 1 p − 1 i 2 p − 1 ≡ p ( p + 1 ) 2 ( m o d   p 2 ) \sum_{i=1}^{p-1} i^{2p-1}\equiv \frac{p(p+1)}{2} (mod\ p^{2}) i=1p1i2p12p(p+1)(mod p2)

好!其中2p-1是奇数哦(题目已经有提示啦)!

现在开始证明这个结论。

把右边的2移到恒等于号的左边,
∑ i = 1 p − 1 i 2 p − 1 + ∑ i = 1 p − 1 i 2 p − 1 ≡ ( p + 1 ) p ( m o d   p 2 ) \sum_{i=1}^{p-1} i^{2p-1} + \sum_{i=1}^{p-1} i^{2p-1}\equiv (p+1)p (mod\ p^{2}) i=1p1i2p1+i=1p1i2p1(p+1)p(mod p2)
可以理解吧。

再把 ∑ i = 1 p − 1 i 2 p − 1 \sum_{i=1}^{p-1} i^{2p-1} i=1p1i2p1从后面往前求和(因为从前往后和从后往前都是一样的呀),就变成
∑ i = 1 p − 1 i 2 p − 1 + ∑ i = 1 p − 1 ( p − i ) 2 p − 1 ≡ ( p + 1 ) p ( m o d   p 2 ) \sum_{i=1}^{p-1} i^{2p-1} + \sum_{i=1}^{p-1} (p-i)^{2p-1}\equiv (p+1)p (mod\ p^{2}) i=1p1i2p1+i=1p1(pi)2p1(p+1)p(mod p2)

合并
∑ i = 1 p − 1 [ i 2 p − 1 + ( p − i ) 2 p − 1 ] ≡ ( p + 1 ) p ( m o d   p 2 ) \sum_{i=1}^{p-1} [i^{2p-1} + (p-i)^{2p-1}]\equiv (p+1)p (mod\ p^{2}) i=1p1[i2p1+(pi)2p1](p+1)p(mod p2)
开始二次项展开

( p − i ) 2 p − 1 = (p-i)^{2p-1}= (pi)2p1=
p 2 p − 1 − C ( 2 p − 1 , 1 ) p 2 p − 2 i + . . . + C ( 2 p − 1 , 2 p − 2 ) p i 2 p − 2 − i 2 p − 1 p^{2p-1}-C(2p-1,1)p^{2p-2}i+...+C(2p-1,2p-2)pi^{2p-2}-i^{2p-1} p2p1C(2p1,1)p2p2i+...+C(2p1,2p2)pi2p2i2p1
就这样,再与 i 2 p − 1 i^{2p-1} i2p1抵消,然后注意一点,因为有 ( m o d   p 2 ) (mod \ p^{2}) (mod p2)所以,当p的指数大于等于2的时候就可以被抵消(2p-1,2p-2等都是奇素数,所以肯定都大于二呀),这么抵消后,最后剩下的就是
∑ i = 1 p − 1 C ( 2 p − 1 , 2 p − 2 ) p i 2 p − 2 \sum_{i=1}^{p-1}C(2p-1,2p-2)pi^{2p-2} i=1p1C(2p1,2p2)pi2p2
易得
C ( 2 p − 1 , 2 p − 2 ) = C ( 2 p − 1 , 1 ) C(2p-1,2p-2)=C(2p-1,1) C(2p1,2p2)=C(2p1,1)
又因为
C ( 2 p − 1 , 1 ) = 2 p − 1 C(2p-1,1)=2p-1 C(2p1,1)=2p1
所以
∑ i = 1 p − 1 ( 2 p − 1 ) p i 2 p − 2 ≡ p ( p + 1 ) ( m o d   p 2 ) \sum_{i=1}^{p-1}(2p-1)pi^{2p-2}\equiv p(p+1) (mod\ p^{2}) i=1p1(2p1)pi2p2p(p+1)(mod p2)
(这个式子很重要,以后会用到
两边式子都有p,同时除以p,注意** m o d   p 2 mod\ p^{2} mod p2也要除以p**,原式就变为
∑ i = 1 p − 1 ( 2 p − 1 ) i 2 p − 2 ≡ ( p + 1 ) ( m o d   p ) \sum_{i=1}^{p-1}(2p-1)i^{2p-2}\equiv (p+1) (mod\ p) i=1p1(2p1)i2p2(p+1)(mod p)
啊,松口气松口气,更难的来了

好吧对于大佬来说很简单费马小定理登场!
我们有
i p − 1 ≡ 1 ( m o d   p ) i^{p-1}\equiv 1 (mod\ p) ip11(mod p)
然后
2 p − 2 = 2 ( p − 1 ) 2p-2=2(p-1) 2p2=2(p1)
所以
∑ i = 1 p − 1 ( 2 p − 1 ) ( i p − 1 ) 2 ≡ ( p + 1 ) ( m o d   p ) \sum_{i=1}^{p-1}(2p-1)(i^{p-1})^{2}\equiv (p+1) (mod\ p) i=1p1(2p1)(ip1)2(p+1)(mod p)
所以
∑ i = 1 p − 1 ( 2 p − 1 ) ≡ ( p + 1 ) ( m o d   p ) \sum_{i=1}^{p-1}(2p-1)\equiv (p+1) (mod\ p) i=1p1(2p1)(p+1)(mod p)
哈哈哈哈额,好开心啊。

前方路长,继续!

因为现在左式求的值是个定值,所以原式变成 ( p − 1 ) ( 2 p − 1 ) ≡ ( p + 1 ) ( m o d   p ) (p-1)(2p-1)\equiv (p+1)(mod\ p) (p1)(2p1)(p+1)(mod p)
展开
2 p 2 − 3 p + 1 ≡ ( p + 1 ) ( m o d   p ) 2p^{2}-3p+1\equiv (p+1)(mod\ p) 2p23p+1(p+1)(mod p)
因为每个都mod p
1 ≡ 1 ( m o d   p ) 1\equiv 1(mod\ p) 11(mod p)

原式成立!!

前面辣么多都是预处理,现在处理题目给出的式子。

∑ i = 1 k p i 2 p − 1 m o d      p 2 \sum_{i=1}^{kp} i^{2p-1} \mod\ p^{2} i=1kpi2p1mod p2
将题目中的i去除以p,得到的商和余数用i和j来表示,那么也就是 i = i p + j i=ip+j i=ip+j(注意区分前面的i和后面的i不一样)

所以就很巧妙的把原来的式子转换成了
∑ i = 0 k − 1 ∑ j = 1 p − 1 ( i p + j ) 2 p − 1 m o d      p 2 \sum_{i=0}^{k-1} \sum_{j=1}^{p-1} (ip+j)^{2p-1} \mod\ p^{2} i=0k1j=1p1(ip+j)2p1mod p2
同样二次项展开,然后就可以转换成
∑ i = 0 k − 1 ∑ j = 1 p − 1 [ ( 2 p − 1 ) i p j 2 p − 1 + j 2 p − 1 ] m o d      p 2 \sum_{i=0}^{k-1} \sum_{j=1}^{p-1} [(2p-1)ipj^{2p-1}+j^{2p-1}] \mod\ p^{2} i=0k1j=1p1[(2p1)ipj2p1+j2p1]mod p2
乘法分配律
∑ i = 0 k − 1 ∑ j = 1 p − 1 ( 2 p − 1 ) i p j 2 p − 1 + ∑ i = 0 k − 1 ∑ j = 1 p − 1 j 2 p − 1 m o d      p 2 \sum_{i=0}^{k-1} \sum_{j=1}^{p-1} (2p-1)ipj^{2p-1}+\sum_{i=0}^{k-1} \sum_{j=1}^{p-1}j^{2p-1} \mod\ p^{2} i=0k1j=1p1(2p1)ipj2p1+i=0k1j=1p1j2p1mod p2
第二个项可以转化成(刚刚预处理时证明的公式
∑ i = 0 k − 1 p ( p + 1 ) 2 \sum_{i=0}^{k-1} \frac{p(p+1)}{2} i=0k12p(p+1)

再转化成
k p ( p + 1 ) 2 \frac{kp(p+1)}{2} 2kp(p+1)
第一个项则可以用我刚刚说很重要的公式
变成
∑ i = 0 k − 1 i p ( p + 1 ) \sum_{i=0}^{k-1} ip(p+1) i=0k1ip(p+1)
继续化简
k ( k − 1 ) 2 p ( p + 1 ) \frac{k(k-1)}{2}p(p+1) 2k(k1)p(p+1)
将两个式子整合,变成
k p ( p + 1 ) 2 + k ( k − 1 ) p ( p + 1 ) 2 \frac{kp(p+1)}{2}+\frac{k(k-1)p(p+1)}{2} 2kp(p+1)+2k(k1)p(p+1)
没有求和公式了吧
那么我们在合并同类项之后原式
k 2 p ( p + 1 ) 2 \frac{k^{2}p(p+1)}{2} 2k2p(p+1)

传说中的O(n)算法!哈哈哈


你好,这里落花殇

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值