二次剩余的判别方法-高斯引理(下)

写在前面:推荐教材为《信息安全数学基础》,书上知识丰富,但许多细节描述得不够到位

希望通过自己的解读,帮助大家节省一些时间来理解这些东西的含义。

上篇我们看到了,可以通过Aa最小绝对值剩余中负数个数来判断a是不是二次剩余

然而这样做比欧拉判别条件累多了,所以这个定理的价值何在呢?

展开今天的话题

我们继续考察数组Aa={1a,2a,......(p-1)a/2},我们先介绍T函数

设p是奇素数,T(a,p)=sum([Aa/p])

看几个例子

T(2,7)=[2*1/7]+[2*2/7]+[2*3/7]=0

T(4,7)=[4*1/7]+[4*2/7]+[4*3/7]=2

T(5,7)=[5*1/7]+[5*2/7]+[5*3/7]=3

第一次在书上看到这个函数迷惑了很久,几周之后再回头思考,才明白了T函数的实际含义,说出来很简单,就是保护取模后的奇偶性。

怎么个保护法?看例子:

如果你想利用模7判断9的奇偶性,你会发现9变成了2,是个偶数,所以9是偶数??funny!

正确的操作是,引入一个保护位[9/7],9=9%7+[9/7] mod 2,很直观呀,模奇素数,过一个周期奇偶性就对换一次,我们加上周期数就能保护奇偶性了。

T函数就是保护了Aa数组的奇偶性,我们以T(5,7)为例:

5+10+15 = 5+3+1+T(5,7) mod 2 =5+3+1+3=12mod2是偶数!

你可能会发问这么做不是折腾嘛,没错,但是至少给了我们利用模判断奇偶性的方法。

 下面我们来看高斯是如何利用它来攻克难题的!

我们来考察sum(Aa)的奇偶性,我们记1到(p-1)/2的求和为S((p-1)/2):

直接求和法:sum(Aa)=a*S((p-1)/2) mod 2······························(0)

取模法:sum(Aa)=sum(Aa%p)+T(a,p) mod 2 ·························(1)

sum(Aa%p)=sum(Aa最小绝对值剩余)+负数个数*p···················(2)

sum(Aa最小绝对值剩余)=sum(|Aa最小绝对值剩余|)·················(3)

sum(|Aa最小绝对值剩余|)=S((p-1)/2)·····································(4)

是不是像一个递归程序,毕竟编程多年,脑袋变成堆栈了哈哈

回溯上去,得到

sum(Aa)=S((p-1)/2)+负数个数*p+T(a,p) mod 2

p是奇数不影响负数个数的奇偶性,负数个数的奇偶性又和勒让德符号一致(见上一篇)

即 sum(Aa)=S((p-1)/2)+Legendre(a,p)+T(a,p) mod 2

带入0式,于是得到  a*S((p-1)/2)=S((p-1)/2)+Legendre(a,p)+T(a,p) mod 2

移项得  (a-1)*S((p-1)/2)=Legendre(a,p)+T(a,p) mod 2·················(INF)

这个式子是核心,我们标为INF

如果a是奇数,那么a-1是偶数,Legendre(a,p)和T(a,p)奇偶性一致

如果a是2,很不幸T(2,p)阵亡为0([2/p]+[4/p]+.......+[(p-1)/p]=0)

Legendre(a,p)=S((p-1)/2) mod 2

最后感慨几句:

我很伤心,因为在实验室写着写着电脑快没电了,于是误以为Ctrl+s就能保存,然后关了电脑回宿舍拿充电器,打开电脑发现啥都没了,提醒一下大家。

再放上一个小心愿,希望在博客园遇到一些热爱探索知识细节的朋友,把问题挖掘到底!许多同学总是对我爱自己造轮子表示不满意,说我学傻了什么的

虽然我写出来的代码确实漏洞百出,但是一个比特不是在自己掌控中填上的,就不能安心,毕竟是为求知而来 。取这个网名,也是一种心态,虽然自己

很弱,但是不妨碍去不懈前进和探索,讲述自己对知识的理解,哪怕每天效率再低,哪怕他们多么看不起我做的事。

猜你喜欢

转载自www.cnblogs.com/qishihaohaoshuo/p/11927056.html