二次剩余问题x的求解及代码实现(python)

article/2025/10/29 13:43:42

一、问题引入

二次剩余是数论基本概念之一。它是初等数论中非常重要的结果,不仅可用来判断二次同余式是否有解,还有很多用途。C.F.高斯称它为算术中的宝石,他一人先后给出多个证明。 [1] 

研究二次剩余的理论称为二次剩余理论。二次剩余理论在实际上有广泛的应用,包括从噪音工程学到密码学以及大数分解。

即关于方                                          x^2 ≡ a (mod p)

对于这个方程,求出满足条件的x。

二、x的求解

在上述问题下,根据p值的不同性质,可以将求解过程分为两种:

1、p = 3 mod 4情况:

解得 x=+-(a ^ ((a+1) / 4)

证明:

x^2 = a (mod p)

       =>a*1 (mod p)          可知 a^((p-1)/2)=1 (mod p)

       =>a ^ a^((p-1)/2) (mod p)

       =>a^((p+1)/2) (mod p)

x=+-a^((p+1)/4) (mod p)

if p%4==3:print(gmpy2.powmod(a,int((p+1)/4),p))print(-gmpy2.powmod(a,int((p+1)/4),p))

2、p = 1 mod 4  

 引入理论基础:(来自信安数学基础)

 

 由此可见,我们需要在求解中写出以下几个关键模块:

一、将质因数p转化为 p-1=2^t *P 其中,P为一个奇数,t则为为p-1中所含2的个数

while P%2==0:P=P//2k=k+1q=2

二、求出一个满足模p平方非剩余的数q,可以采取设置一个较小的质数q,验证它的 q^(p-1)/2==-1 (mod)p是否恒成立,即可的解:

q=2while q: l=gmpy2.powmod(q,int((p-1)/2),p)if l==p-1:breakq=sympy.nextprime(q)

 三、在k-1个循环中判断gmpy2.powmod(m,n,p)==p-1为0还是为1,其中:

如果为1,则x[k-i-1]=x[k-i]*pow(b,j0*(2**(i-1)))%p

如果为0,则x[k-i-1]=x[k-i]%p

最终输出x=x[0]即为我们所求解

for i in range(1,k):m=re_a*pow(x[k-i],2)n=pow(2,(k-i-1))if gmpy2.powmod(m,n,p)==p-1:j0=1x[k-i-1]=x[k-i]*pow(b,j0*(2**(i-1)))%pelse:j1=0x[k-i-1]=x[k-i]%p

 所以我们可以写出以下代码用于求解二次剩余定理:

p=
a=k=0
import gmpy2
import sympyP=(p-1)
if p%4==3:print(gmpy2.powmod(a,int((p+1)//4),p))print(-gmpy2.powmod(a,int((p+1)//4),p))
else:while P%2==0:P=P//2k=k+1q=2while q: l=gmpy2.powmod(q,int((p-1)//2),p)if l==p-1:breakq=sympy.nextprime(q)b=gmpy2.powmod(q,P,p)x=[0 for i in range(k)]re_a=gmpy2.invert(a,p)x[k-1]=gmpy2.powmod(a,int((P+1)//2),p)for i in range(1,k):m=re_a*pow(x[k-i],2)n=pow(2,(k-i-1))if gmpy2.powmod(m,n,p)==p-1:j0=1x[k-i-1]=x[k-i]*pow(b,j0*(2**(i-1)))%pelse:j1=0x[k-i-1]=x[k-i]%pprint(x[0])

带入

p=401

a=41

进行测试:

344


http://chatgpt.dhexx.cn/article/ubkuKqk5.shtml

相关文章

二次剩余(学习笔记)

就是用来求解 x 2 ≡ n   m o d   p x^2\equiv n \bmod p x2≡nmodp的一个方法 对 p p p进行分类讨论: p 2 p2 p2 ,则 x n xn xn p p p为奇素数 勒让德符号: ( a p ) { 1 a 在 模 p 意 义 下 是 二…

(转载)二次剩余(知识总结+板子整理)

思路来源 https://blog.csdn.net/kele52he/article/details/78897187(二次剩余) https://blog.csdn.net/stevensonson/article/details/85845334(二次剩余) https://blog.csdn.net/skywalkert/article/details/52591343?locat…

二次同余方程(二次剩余)

文章目录 一、介绍1.定义2.定理 二、判别1.勒让德符号(Legendre Symbol)2.欧拉判别准则(Eulers criterion)(1)内容(2)证明(3)注意 三、 x 2 ≡ n ( m o d x^2≡n(mod x2≡n(mod p ) p) p)——奇波拉算法(Cipollas alg…

二次剩余 数论 勒让德

在数论中,特别在同余理论里,一个整数对另一个整数的二次剩余(英语:Quadratic residue)指的平方除以得到的余数。 当存在某个,式子成立时,称“是模的二次剩余” 当对任意,不成立时&…

二次剩余

title: 二次剩余 date: 2019-08-27 00:10:46 tags: 数论 一、定义(Quadratic_residue) 一个整数X对另一个整数p的二次剩余 d 注意这边的取模是 X 2 X^2 X2 和 d 都要对p取模噢 eg. 3 2 ≡ 2 ( m o d 7 ) 3^2≡2 (mod\ 7) 32≡2(mod 7),我们称 2是7的…

win10增加美式键盘

仅为做记录 我的系统为win10专业版 1809 首先进入语言首选项 选择添加语言 选择英语(美国) 之后选择拼写、键入和键盘设置 在输入的最下面选择高级键盘设置 选择语言栏选项 更改按键顺序选项中可以修改切换语言的快捷键 本质上是切换语言种类而不是输…

删除Win10英语国际键盘的方法

按下winR打开运行,键入regedit点击确定打开注册表 在注册表中依次展开:HKEY_CURRENT_USER\Keyboard Layout\Preload 改成下面的样子: 这个表示默认输入法是英语-美式键盘,接下来是中文-美式键盘。 注1:可以右键创…

win10添加美式键盘_戴尔笔记本win10降win7教程

现在大多数人电脑操作系统都是win10,但是很多人由于各种原因,比如部分软件限制,还是不得不继续使用win7操作系统,有些朋友自己安装win7的时候会发现各种问题,始终安装不上,接下来我整理下win10降win7的办法…

超详细window10添加美式键盘

转自https://blog.csdn.net/qq_41139830/article/details/80500841 打开控制面板->添加语言 然后点击图中的添加语言 选择英语 选择英语(美国) 然后回到下图这个界面,就会发现多出了美式键盘 (如果美式键盘在上面,就要将其下移&#xff0…

win10切换输入法快捷键_软件快捷键失灵,可能是你没有安装美式键盘

工程类用到的软件,比如Altium designer、keil、ccs、Quartus ii等基本都是老外开发的,他们的工作的键盘模式都是美式键盘,快捷键也相应的是美式键盘下的快捷键,这就导致我们自己在使用这些软件时,要注意选择键盘类型&a…

Win10怎么设置默认输入法为美式英文键盘

默认的输入法就是进入系统后一打字就是你想要的那一种输入法。WIN10的默认输入法是微软拼音输入法,它是一个中文的输入法,用起来不是很方便。 相对来说,大部分人都是习惯输入法默认的状态是英文的。这样可以在输入网址,或是在码字…

win10添加美式键盘_在win10中使用多种键盘布局,你知道如何操作吗

Windows10操作系统允许用户使用多种键盘布局,用户可以在初始设置过程中添加一个或多个键盘布局(也称为“开箱即用”体验(OOBE))。但是,如果你配置了错误的布局,或者以后需要键入不同的语言,则可以随时添加和更改键盘配置。 一般情…

Win10添加美式键盘

为什么80%的码农都做不了架构师?>>> WIN8也可以这实现! ###在“中文”内添加美式键盘需要修改注册表。 打开CMD,输入 regedit 打开注册表编辑器; 转到 HKEY_CURRENT_USER/Keyboard Layout/Substitutes, 新…

win10添加美式键盘_WIN10系统必做的6个优化,优化完电脑性能飙升。

现在越来越多的人开始用WIN10系统了,而对于习惯了使用WIN7系统的用户来说,刚刚开始接触WIN10系统,确实会有点不适应,特别是使用过程中一会儿弹出一个对话框,一会儿一个什么通知的,不厌其烦,接下…

win10添加美式键盘_Win10自带的这6款软件,90%的人都不知道,但个个都好用到爆!...

什么,微软还出过我不知道的软件? 你别不信,这篇文章三顿就要给大家分享6个微软官方出品的软件神器,而且全都无需安装无需下载,它们就藏在你的操作系统里,一起来看看吧! 微软拼音输入法 一说到输…

win10添加美式键盘_Windows10添加中文美式键盘,传统语言栏,采用ctrl+shift切换输入法...

Windows10添加中文美式键盘,采用ctrlshift切换输入法 用XP和Windows 7习惯后 用Windows 10 发现切换输入法快捷键变了,变成Windows键空格,现在觉得不适应,遂改回来。 而且还有一个很蛋疼的问题,这个在Windows8时代就有…

WIn11多出美式键盘如何删除

一、操作步骤 1.进入设置页 右键点击左边底部的输入法处,点击更多键盘设置 2.进入语言和区域添加语言 进入到如图所示页面,点击添加语言 添加语言后才可以删除键盘 3.安装英语(美国)语言 搜索到以后点击下一步,可以不选手写等功能安装&…

如何彻底删除windows10自带的美式键盘

1.先左键点击右下角的输入法,然后在点击语言首选项 2.进入语言设置,选择添加语言 3.在搜索框中输入english,下拉滚动条选择 英语(美国)English(United States)选项,然后点击下一页 4.只选择安装语言包即…

win10解决已禁用输入法和隐藏中文简体美式键盘

环境 win10 21h1 win10解决已禁用输入法 设置->时间和语言->语言->拼写、键入和键盘设置->高级键盘设置隐藏中文简体美式键盘 reg add HKEY_CURRENT_USER\SOFTWARE\Microsoft\CTF\HiddenDummyLayouts /v 00000804 /t REG_SZ /d 00000804参考文章 https://soci…

有效删除Win10英语(美式键盘)输入法

原文转载自百度经验,作者ID砸牛顿的苹果,原文链接https://jingyan.baidu.com/article/e4511cf39d7c382b855eaf62.html。 1.进入语言选项以后,默认英文键盘是无法删除的。我们需要添加一个英文语言包才可以删除,点击添加语言。 2…