密码学的数学基础3-同余方程

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

一元高次同余方程

方程的性质

求解策略

若整数 d ∣ m , d \mid m, dm, 那么同余方程 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)=4x227x90(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)=xpx0(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) 3x15x13x12+x113x5+6x32x2+2x10(mod11)
\quad 利用恒等同余式 x 11 ≡ x (   m o d   11 ) , x^{11} \equiv x(\bmod 11), x11x(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} =3x15x13x12+x113x5+6x32x2+2x1(x11x)(3x4x2x+1)+5x33x2+3x1(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) 5x33x2+3x10(mod11) 同解,依次试0~10可知同余方程的解为 x ≡ 2 (   m o d   11 ) x \equiv 2(\bmod 11) x2(mod11)

一次同余方程

方程的性质与求解策略

标准形式: a x ≡ b ( m o d   m ) ax\equiv b(mod\ m) axb(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 xx0+(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
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值