密码学的数学基础3-同余方程
一元高次同余方程
方程的性质
求解策略
若整数 d ∣ m , d \mid m, d∣m, 那么同余方程 f ( x ) ≡ 0 ( m o d m ) f(x) \equiv 0(\bmod m) f(x)≡0(modm) 有解的必要条件为
f ( x ) ≡ 0 ( m o d d ) f(x) \equiv 0(\bmod d) f(x)≡0(modd)
此性质可以判断方程是否无解.
例题: 求解同余方程 f ( x ) = 4 x 2 − 27 x − 9 ≡ 0 ( m o d 15 ) . 解 : 15 的素因子只有 3 , 5 , 但只有 f ( 3 ) ≡ 0 ( m o d 3 ) , 而 f ( 1 ) , f ( 2 ) , f ( 3 ) , f ( 4 ) f ( 5 ) ≢ 0 ( m o d 5 ) , 从而此同余方程无解. \begin{aligned} & \quad \text { 求解同余方程 } f(x)=4 x^{2}-27 x-9 \equiv 0(\bmod 15) .\\ &\text { 解 :} \quad 15 \text { 的素因子只有 } 3,5, \text { 但只有 } f(3) \equiv 0(\bmod 3), \text { 而 } f(1), f(2), f(3), f(4)\\ &f(5) \not \equiv 0(\bmod 5), \text { 从而此同余方程无解. } \end{aligned} 求解同余方程 f(x)=4x2−27x−9≡0(mod15). 解 :15 的素因子只有 3,5, 但只有 f(3)≡0(mod3), 而 f(1),f(2),f(3),f(4)f(5)≡0(mod5), 从而此同余方程无解.
化简:
如果 f ( x ) = q ( x ) h ( x ) + r ( x ) f(x)=q(x) h(x)+r(x) f(x)=q(x)h(x)+r(x)
且同余方程 h ( x ) ≡ 0 ( m o d m ) h(x) \equiv 0(\bmod m) h(x)≡0(modm) 为恒等同余式, 即方程的解数为 m , m, m, 则同余方程 (3.1) 与同余方程
r ( x ) ≡ 0 ( m o d m ) r(x) \equiv 0(\bmod m) r(x)≡0(modm)
解与解数相同. 利用恒等同余式降低同余方程的次数,关键是找模 m 的恒等同余式. 如果 m 为素数 p p p, 利用 Fermat-Euler 定理,易知,
h ( x ) = x p − x ≡ 0 ( m o d p ) h(x)=x^{p}-x \equiv 0(\bmod p) h(x)=xp−x≡0(modp)
为恒等同余式.
例题:
求解同余方程
3 x 15 − x 13 − x 12 + x 11 − 3 x 5 + 6 x 3 − 2 x 2 + 2 x − 1 ≡ 0 ( m o d 11 ) 3 x^{15}-x^{13}-x^{12}+x^{11}-3 x^{5}+6 x^{3}-2 x^{2}+2 x-1 \equiv 0(\bmod 11) 3x15−x13−x12+x11−3x5+6x3−2x2+2x−1≡0(mod11)
解 \quad 利用恒等同余式 x 11 ≡ x ( m o d 11 ) , x^{11} \equiv x(\bmod 11), x11≡x(mod11), 由多项式除法得
3 x 15 − x 13 − x 12 + x 11 − 3 x 5 + 6 x 3 − 2 x 2 + 2 x − 1 = ( x 11 − x ) ( 3 x 4 − x 2 − x + 1 ) + 5 x 3 − 3 x 2 + 3 x − 1 ( m o d 11 ) \begin{aligned} & 3 x^{15}-x^{13}-x^{12}+x^{11}-3 x^{5}+6 x^{3}-2 x^{2}+2 x-1 \\ =&\left(x^{11}-x\right)\left(3 x^{4}-x^{2}-x+1\right)+5 x^{3}-3 x^{2}+3 x-1(\bmod 11) \end{aligned} =3x15−x13−x12+x11−3x5+6x3−2x2+2x−1(x11−x)(3x4−x2−x+1)+5x3−3x2+3x−1(mod11)
所以原同余方程与同余方程 5 x 3 − 3 x 2 + 3 x − 1 ≡ 0 ( m o d 11 ) 5 x^{3}-3 x^{2}+3 x-1 \equiv 0(\bmod 11) 5x3−3x2+3x−1≡0(mod11) 同解,依次试0~10可知同余方程的解为 x ≡ 2 ( m o d 11 ) x \equiv 2(\bmod 11) x≡2(mod11)
一次同余方程
方程的性质与求解策略
标准形式: a x ≡ b ( m o d m ) ax\equiv b(mod\ m) ax≡b(mod m)
- 若(a,m)=1,则有且只有一个解.
- 方程有解的充要条件是 ( a , m ) ∣ b (a,m)|b (a,m)∣b,有解时,解数等于 ( a , m ) (a,m) (a,m)
- 若 x 0 x_{0} x0 是它的一个解,则它的(a, m) 个解是
x ≡ x 0 + m ( a , m ) t ( m o d m ) , t = 0 , 1 , ⋯ , ( a , m ) − 1 x \equiv x_{0}+\frac{m}{(a, m)} t(\bmod m), t=0,1, \cdots,(a, m)-1 x≡x0+(a,m)mt(modm),t=0,1,⋯,(a,m)−1
证明过程比较简单,略.
使用以上三个性质,我们可以进行一次同余方程的求解,求解过程利用拓展欧几里得算法为基础*(关于拓展欧几里得的算法在第一章写过)*,进行求解,完整代码如下:
#include<iostream>
using namespace std;
void ex_Eclid_recursive(int a, int b, int& gcd, int& x, int& y)
{
if (b == 0)
x = 1, y = 0,gcd = a;
else
{
ex_Eclid_recursive(b, a % b, gcd, y, x);
y -= x * (a / b);
}
}
int main()
{
cout << "求解一次同余方程ax=b(mod m)格式程序:" << endl;
int a , b , m ,gcd=0,x=0,y=0,temp=0,count=0;//a,b,m值对应方程中的系数
printf("请依次输入a,b,m:");
scanf_s("%d%d%d", &a, &b, &m);
cout << a << "x" << "=" << b << "(mod " << m << ") ";
ex_Eclid_recursive(a, m, gcd, x, y);
if (b % gcd != 0)
{
cout << "此方程无解!!" << endl;
}
else
{
co

本文深入探讨密码学中的数学原理,重点讲解同余方程的性质与求解策略,包括一元高次同余方程、一次同余方程组、孙子定理及其应用,以及二次剩余的欧拉判别法。通过例题解析,帮助读者掌握解决复杂同余方程的方法。
最低0.47元/天 解锁文章
1880

被折叠的 条评论
为什么被折叠?



