数论基本理论的整理
来源:互联网 发布:2017双11实时数据 编辑:程序博客网 时间:2024/05/22 15:56
1. 大整数情况,衡量问题复杂度是输入的整数的位数,衡量效率是位操作的次数。
2. 除法定理:a=qn+r, 余数为r<n;
3. 取模可以划分等价类,[a]n表示模n后余数为a的数即 a+k*n;
例如[3]7=[-4]7=[10]7中,k分别取 0,-1,1. 等价类的代表元是3,3+k*7即等价类的所有的元素
4. 用Zn表示所有的模n的等价类地集合即Zn={[a]n: 0<=a<=n-1},即所有的a代表的那些等价类
5. a=qn,记录为 n|a,即 n是a的约数
6 模运算定义群:群(单位元,逆元,结合律的代数结构:操作加集合)
6.1 定义集合Zn上的群,注意Zn是集合的集合,即Zn中的元素是等价类
如果a~a'(mod n),b~b'(mod n)
则 a+b~a'+b' (mod n) (a+k1*n)+(b+k2*n)=(a+b)+(k1+k2)*n=[a+b]n
a*b~a'*b' (mod n) (a+k1*n)(b+k2*n)=ab+(a*k2+b*k1+k)n=[ab]n, 注意,这里a,b要与n互质,否则ab+(a*k2+b*k1+k)n=k*n即变成了0的等价类
因此定义等价类的加法为其代表元的加法,等价类的乘法为其代表元的乘法[a]n+[b]n=[a+b]n, a[n]*b[n]=[ab]n
例如Z6集合中的元素为[0]6,[1]6,[2]6,..[5]6即每个元素都是一个等价类
[2]mod6 * [5]mod6==[2*5]mod6=[4]mod6
6.2 Zn*的定义, Zn集合中的元素时等价类,这些等价类中所有代表元与n互质的那些等价类的集合即Zn*
例如Z15*={ [1],[2],[4],[7],[8],[11],[13],[14] }
6.3 Zn*集合上的乘法操作构成乘法群,求逆元用推广的欧几里得算法
ax+ny=1 移项得 ax=1-ny=1+kn 即 ax~1modn,
例如 [5]mod11, a=5,n=11, extended_euclid(a,n)=(d,x,y)=(1,-2,1),于是 1=a(-2)+n*1=5*(-2)+11*1, 因此-2是模11乘法下5的逆元
6.4 ax~b modn
这种形式表示的含义是[a]n*[x]n=[b]n
7. 线性 模方程
7.0
同余的概念是这样描述的:
设m是一个给定的正整数,如果两个整数a,b用m除,所得的余数相同,则称a,b对模m同余。
所谓线性同余法(又叫混合同余法),就是这样的一个公式:X[i+1]=(A*X[i]+C) mod M;
7.1 用推广的欧几里得算法求交换群中乘法的逆元
http://blog.csdn.net/sinapme/article/details/17296799 该文章中详细注解了推广的欧几里得算法 extended-euclid求解 d=gcd(a,b)=ax+by返回 (d,x,y)三元式的结论。 其中gcd因子d的求解和一般的欧几里得算法一致。
利用该算法可以求Zn*中元素的乘法逆元,设a是Zn*中的元素,即 a代表等价类 [a]n, 求extended-eulicd(a,n)得到(d,x,y),因为Zn*中都为质数,所以gcd为1.即(1,x,y)即 ax+by=1即 ax+yn=1, 也即 ax~1modn,因此x是a的逆元。
7.2 线性模方程的定义:
求解 ax~b(mod n) 即 ax=b+kn这个方程,求出所有符合条件的x,这种方程称为 线性模方程
设<a>表示由 [a]mod n生成的Zn的子群(这种群称为循环群)。注意Zn是加法群,因此<a>=a^x=a+a+..+a一共加了x次=a*x, 也即ax是Zn上(注意Zn表示的是等价类【i】n的集合)的加法群因此ax~b这个线性模方程有解的条件是b 属于 <a>
7.3 线性模方程有解的条件:
定理:设d=gcd(a,n),则 <a>=<d>={0,d,2d,.....(n/d-1)d}即d的倍数,因此线性模仿成有节的条件是 gcd(a,n)|b即 d是b的因子,即b=p*d属于{0,d,2d,....(n/d-1)*d},或者说这 n/d个都是 ax~b的解,如果 gcd(a,n)不是b的约数,则 ax~b无解。
即要么有d个解,要么无解。
7.4 线性模方程的初始解
上面论证了线性模方程有解的条件,n/d个解是相互联系的,因此求出一个解就可以获得所有解。
首先用extended-euclid方法求出d=gcd(a,n)=ax'+ny', 如果d|b即d是b的约数,
则初始解为x0=x‘(b/d)mod n (注意对于乘法群,可以通过extended-euclid来求解a元素的逆元, 即通过1=ax'+ny求出a的逆元x’)
这里d=ax'+ny'求出的是满足 ax'~d的 x‘, 而d|b,即d是b的约数,因此, ax'~b的解为 x' (b/d) mod n,
注意 d|b,因此b/d是无需取模的
有了这个初始解,就可以构造出所有的解 xi=x0+i(n/d)
7.5 程序
modular-linear-equation-solver(a,b,n) //即 ax~bmodn 的解
(d,x',y')=extended-euclid(a,n)
if (d|b)
{
x0=x'(b/d)modn
foreach(i)
{
xi=x0+i(n/d) mod n
}
}
else
{
print “无解”
}
7.6 实际例子
求解 14x~30 mod100, 即 ax~bmodn
extend-euclid(a,n)=extended-euclid(14,100)返回(d,x,y)=(2,-7,1)因此d|30,因此有解
x0=x’*b/d=(-7)*30/2mod100=-105mod100=95mod100
一共有d个解,另一个是 95+i*n/d=95+i*100/2=95+i*50=45;- 数论基本理论的整理
- 软件测试基本理论整理
- 彗星的基本理论
- 关卡设计的基本理论
- IC测试的基本理论
- 计算机语言的基本理论
- 第一章 沟通的基本理论
- 数论整理
- 数论整理
- 数论整理
- 数论整理
- 基本理论
- 供应链管理的基本理论
- 字符串的学习---基本理论学习
- 测试的基本理论与方法
- 研究计算机基本理论的学科
- 数据库层面的一些基本理论
- TensorFlow的基本理论知识(一)
- ORA-609:疑似MEMORY_TARGET设置过大导致的宕机
- Metapost—Hello World
- 复杂的表单服务器端验证
- 未定义行为
- jQuery对Ajax的封装:load(),get(),post()
- 数论基本理论的整理
- UFLDL Tutorial_Linear Decoders with Autoencoders
- 手游团队的六个死因 取舍Unity技术引争议
- jQuery三级联动
- java 对象转成字符串
- MFC几种给对话框添加背景图的方法
- ASP.NET对HTML元素进行权限控制(三)
- 1042:元音字母转
- sqoop常用命令