计算字符串的干草堆大小
Calculating haystack size of a string
我想创建一个密码复杂性检查程序的穷人版本。我确定密码使用的粗略字符集及其长度。搜索 space 将是:charset ^ length。为了将它与单个值进行比较,我想要最小的 x,当它用作 2 的指数时大于搜索 space。在更多的数学语言中,我想要这个:
给定 a 和 b 找到最小的 x,其中 a^b < 2^x;
我的数学很烂。有没有快速简便的计算方法?
也许我的数学没那么烂。
2^x == a^b
= define a = 2^c, c = 2loga
2^x == 2^c^b
=
2^x == 2^c*b
=
x == c*b
=
x == 2loga * b
您可以使用对数求解方程。两边取对数得到
x > b * log(a) / log(2)
如果你想找到满足等式的最小整数,我们可以将右边四舍五入。在 python 中,这可以实现为
import math
def find_x(a, b):
return math.ceil(b * math.log(a) / math.log(2))
我想创建一个密码复杂性检查程序的穷人版本。我确定密码使用的粗略字符集及其长度。搜索 space 将是:charset ^ length。为了将它与单个值进行比较,我想要最小的 x,当它用作 2 的指数时大于搜索 space。在更多的数学语言中,我想要这个:
给定 a 和 b 找到最小的 x,其中 a^b < 2^x;
我的数学很烂。有没有快速简便的计算方法?
也许我的数学没那么烂。
2^x == a^b
= define a = 2^c, c = 2loga
2^x == 2^c^b
=
2^x == 2^c*b
=
x == c*b
=
x == 2loga * b
您可以使用对数求解方程。两边取对数得到
x > b * log(a) / log(2)
如果你想找到满足等式的最小整数,我们可以将右边四舍五入。在 python 中,这可以实现为
import math
def find_x(a, b):
return math.ceil(b * math.log(a) / math.log(2))