算法导论-----数论-----一般离散对数问题
2012-03-17 15:50
253 查看
一般离散对数问题(GDLP)(摘自天津大学PPT)
1.一般离散对数问题(GDLP):给定一个n阶的有限循环群G和它的一个原根,以及元素b,求一个整数x(0≤x≤n-1),使得ax=b(modn)
2.Baby-step Giant-step,令m=(p-1)1/2,如果b=ax,那么可以把x重写为x=i*m+j,其中0 ≤ i, j < m,于是b=ai*m * aj,两边同除得b(a-m)i=aj,然后可以通过下面的算法来计算x
3.例:令p=113,a=3,b=57执行算法:
m=11
计算出的二元组排好序为:
j 0 1 8 2 5 9 3 7 6 10 4
3j(mod 113) 1 3 7 9 17 21 27 40 51 63 81
计算a-1=3-1(mod 113) = 38,然后计算a-m=3811(mod 113) = 58
执行循环过程中r=b*a-mi,查找过程中的(i, r)为:
i 0 1 2 3 4 5 6 7 8 9
r 57 29 100 37 112 55 26 39 2 3
最终返回:i * m + j = 9 * 11 + 1 = 100
4.判断a是否是Zn*的原根:
定理:设n>1,φ(n)的所有不同素因数是p1, p2, …, pk。gcd(a, n) = 1,则a是Zn*的原根的充要条件是:
对于所有的i(1≤i≤k),
(modn)!=1;
1.一般离散对数问题(GDLP):给定一个n阶的有限循环群G和它的一个原根,以及元素b,求一个整数x(0≤x≤n-1),使得ax=b(modn)
2.Baby-step Giant-step,令m=(p-1)1/2,如果b=ax,那么可以把x重写为x=i*m+j,其中0 ≤ i, j < m,于是b=ai*m * aj,两边同除得b(a-m)i=aj,然后可以通过下面的算法来计算x
3.例:令p=113,a=3,b=57执行算法:
m=11
计算出的二元组排好序为:
j 0 1 8 2 5 9 3 7 6 10 4
3j(mod 113) 1 3 7 9 17 21 27 40 51 63 81
计算a-1=3-1(mod 113) = 38,然后计算a-m=3811(mod 113) = 58
执行循环过程中r=b*a-mi,查找过程中的(i, r)为:
i 0 1 2 3 4 5 6 7 8 9
r 57 29 100 37 112 55 26 39 2 3
最终返回:i * m + j = 9 * 11 + 1 = 100
4.判断a是否是Zn*的原根:
定理:设n>1,φ(n)的所有不同素因数是p1, p2, …, pk。gcd(a, n) = 1,则a是Zn*的原根的充要条件是:
对于所有的i(1≤i≤k),
(modn)!=1;
相关文章推荐
- hdu——2815(数论之Baby Step Giant Step解决离散对数问题)
- appfuse下使用ibatis的一般步骤和若干问题
- 算法导论-----------------0-1背包问题dp求解
- 据说这篇总结覆盖了一般Python开发面试中可能会问到的大部分问题
- Tomcat的参数配置及一般问题的解决
- 算法导论第三版 习题5.2-1和5.2-2 HIRE-ASSISTANT问题
- [zynq7 问题记录] ps 从axi总线读数据卡住了一般是什么原因导致的
- WinCE开发的一般问题
- 【数论】整数的划分问题
- 称球问题的一般解法
- 程序员面试一般会问哪些问题,以供大家参考(以.NET程序员以例)
- 组合数取模问题【数论】
- 数论问题精选
- 解决问题一般的工具和方法
- 一般Spring MVC项目问题排查经验
- 一般java.lang.NoClassDefFoundError异常错误的问题和解决
- 球类称重问题的一般解法
- C++解决一般大数统计问题
- 算法数据结构面试分享(二)- 解决算法问题的一般方法
- 配置tomcat到系统服务方法及一般问题解决办法