【问题标题】:Write a function that, given natural numbers n, m, determines the smallest natural number k such that n^k >= m, in time O(log k)编写一个函数,给定自然数 n、m,确定最小的自然数 k,使得 n^k >= m,时间为 O(log k)
【发布时间】:2022-11-18 06:28:10
【问题描述】:

我只能在 O(k) 时间内完成,有人可以帮助我吗?我不能使用内置函数。

def potnr(a, b):
    rez = 1
    while b>0:
        if b%2:
            rez = rez * a

        b = b // 2
        a = a * a
        
    return rez

def liczba(n, m):
    k = 1
    while potnr(n, k) < m:
        k += 1

    return k

print(liczba(2, 16))

我只能在 O(k) 时间内完成,有人可以帮助我吗

【问题讨论】:

    标签: python


    【解决方案1】:

    n^k &gt;= m 当且仅当 k &gt;= log m base n

    由于log m base n = log m / log n,这很简单:

    from math import log, ceil
    def smallest_k(n, m):
        return ceil(log(m)/log(n))
    

    这在O(1) 时间运行。

    【讨论】:

    • 仅供参考:您可以写成log(m, n),而不是log(m)/log(n)
    • ty 的答案,但我不能使用内置函数抱歉没有这么说
    猜你喜欢
    • 2013-02-21
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-02-09
    • 1970-01-01
    • 2018-06-18
    • 2011-11-23
    相关资源
    最近更新 更多