zoukankan      html  css  js  c++  java
  • 算法导论数论一般离散对数问题

    一般离散对数问题(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;

  • 相关阅读:
    Operator开发实例
    Go构建HTTP服务
    Go依赖包的管理
    Go并发编程机制
    Go语言的基础数据类型
    k8s的APIServer流程介绍
    promise、resolve、reject、拦截响应
    AngularJS中service,factory,provider的区别
    scope
    sass入门
  • 原文地址:https://www.cnblogs.com/inpeace7/p/2403292.html
Copyright © 2011-2022 走看看