![]() |
1
15
这根本不是一个简单的问题。它被称为计算 discrete logarithm 它是对 modular exponentation . 没有已知的有效算法。也就是说,如果n表示m中的位数,则所有已知算法都在o(2^(n^c))中运行,其中c>0。 |
![]() |
2
28
从%运算符,我假设您正在处理整数。 你在努力解决 the Discrete Logarithm 问题。合理的算法是 Baby step, giant step 虽然还有很多其他的,但都不是特别快。 很难找到离散对数问题的快速解决方案,这是一些流行的密码算法的一个基本部分,所以如果你找到一个比维基百科上任何一个更好的解决方案,请告诉我! |
![]() |
3
2
Discrete logarithm 是个难题
我将在这里添加一个简单的Bruteforce算法,它尝试来自
在这里你可以看到
有一个更好的算法,但是因为它经常被要求在编程比赛中实现,我只给你一个链接 explanation . |
![]() |
4
2
由于在python标签下提出了这个问题的副本,下面是baby-step的python实现,正如@markbeyers指出的那样,biggant-step是一种合理的方法(只要模数不太大):
在上面的实现中,一个显式的
例如,如果
然后“pow(a,b,p)”计算为67385023448517 和
这在我的机器上花了大约5秒钟。对于这些尺寸的指数和模量,我估计(基于定时实验)蛮力可能需要几个月。 |
![]() |
5
0
如前所述,一般问题很难解决。然而,如果且仅当您知道e将很小时(就像在您的示例中一样),找到e的一种精确方法就是尝试1中的每个e。 btw e==3是示例的第一个解决方案,显然,与求解非离散版本相比,您可以在3个步骤中发现这一点,并天真地寻找整数解,即。 e=log(c+n*m)/log(b),其中n为非负整数 在9个步骤中发现e==3 |
![]() |
Diret · 获取范围内每个数字的子倍数的算法 2 年前 |
![]() |
Saif · 排序时python如何决定何时调用比较器? 2 年前 |
![]() |
Wadu Hek · 查找列表中唯一的重复项 2 年前 |
![]() |
Crawford Patten · 如何获得整数列表的四分位数 2 年前 |
![]() |
MoonGoose · 如何在python中围绕特殊字符创建空间? 2 年前 |
![]() |
taha khamis · 在一个数字中组合元素的省道 2 年前 |
![]() |
Soup · 比O(n)更快地找到阶乘n模m 3 年前 |
![]() |
BigO · 单词积分游戏不断增加数字[关闭] 3 年前 |