ICode9

精准搜索请尝试: 精确搜索
首页 > 其他分享> 文章详细

Pohlig–Hellman algorithm

2021-06-14 14:36:46  阅读:225  来源: 互联网

标签:dots frac algorithm Big Pohlig Hellman equiv mod


给定 \(a,P\),\(P\) 是质数,设 \(g\) 为 \(P\) 的原根,求出 \(g^x\equiv a\mod P\)

Pohlig–Hellman algorithm

对 \(P-1\) 唯一分解,设为 \(\prod p_i^{e_i}\),对每个 \(p_i^{e_i}\) 解出:

\[g^{x_i\Big(\frac{p-1}{p_i^{e_i}}\Big)}\equiv a \]

那么有 \(x \equiv x_i\mod p_i^{e_i}\)
我们最后只需要解一个同余方程即可,问题转化为对每个 \(p_i^{e_i}\) 求出 \(x_i\)
我们考虑 \(x_i\) 的 \(p_i\) 进制表示,不妨设为 \(b_0+b_1p+\dots +b_{e_i-1}p^{e_i-1}\)
下面的做法将始我们按位确定 \(b_i\),如何做呢?
我们知道:\((g^{x_i})^{\frac{P-1}{p_i}}\equiv a^{\frac{P-1}{p_i}}\mod P\)
即 \(g^{b_0\frac{p-1}{p_i}+b_1(p-1)+b_2(p-1)p_i+\dots}=a^{\frac{p-1}{p_i}}\mod P\)
注意到后面就都是 \(1\) 了,故 \(g^{b_0\frac{p-1}{p_i}}\equiv a^{\frac{p-1}{p_i}}\mod P\)
此时枚举 \(b_0\) 就可以算出
然后我们再考虑 \((g^{x_i})^{\frac{p-1}{p_i^2}}\equiv a^{\frac{p-1}{p_i^2}}\mod P\)
此时只需要把 \(g^{b_0\frac{p-1}{p_i^2}}\) 除过去就能变成一个子问题
每次需要快速幂和求逆,每一轮枚举可以用 BSGS,故复杂度为 \(\sum e_i(\log P+\sqrt p_i)\)

标签:dots,frac,algorithm,Big,Pohlig,Hellman,equiv,mod
来源: https://www.cnblogs.com/FSYo/p/14882380.html

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有