当前位置: 首页 > 面试题库 >

如何找到第n个整数根?

司马彦
2023-03-14
问题内容

我想找到小于或等于n的第k个根的最大整数。我试过了

int(n**(1/k))

但是对于n = 125,k = 3,这给出了错误的答案!我碰巧知道5的立方是125。

>>> int(125**(1/3))
4

有什么更好的算法?

背景:在2011年,这次滑坡使我击败了Google Code
Jam。https://code.google.com/codejam/contest/dashboard?c=1150486#s=p2


问题答案:

一个解决方案首先通过将hi乘以2直到n在lo和hi之间,将lo和hi之间的答案括起来,然后使用二进制搜索来计算确切的答案:

def iroot(k, n):
    hi = 1
    while pow(hi, k) < n:
        hi *= 2
    lo = hi // 2
    while hi - lo > 1:
        mid = (lo + hi) // 2
        midToK = pow(mid, k)
        if midToK < n:
            lo = mid
        elif n < midToK:
            hi = mid
        else:
            return mid
    if pow(hi, k) == n:
        return hi
    else:
        return lo

一种不同的解决方案使用牛顿方法,该方法在整数上运行良好:

def iroot(k, n):
    u, s = n, n+1
    while u < s:
        s = u
        t = (k-1) * s + n // pow(s, k-1)
        u = t // k
    return s


 类似资料:
  • 我想找到小于或等于n的第k个根的最大整数 但是对于n=125,k=3,这给出了错误的答案!我碰巧知道5的立方是125 什么是更好的算法? 背景:2011年,这个失误让我打败了谷歌代码堵塞。https://code.google.com/codejam/contest/dashboard?c=1150486#s=p2

  • 问题内容: 我需要一种方法来计算Python中长整数的第n个根。 我试过了,但是不起作用: OverflowError:long int太大,无法转换为float 有任何想法吗? 长整数是指真正的长整数,例如: 11968003966030964356885611480383408833172346450467339251 1960931441410456834630852911156774884

  • 问题内容: 我指的是以下查询,以找到雇员的Nth最高薪水。 一位先生说,此查询有效。有人可以解释一下如何将COUNT(n等于1到X,其中X是不同工资总额)的值等于&n会产生这个结果吗? 我试图了解数据库如何在内部处理此查询并产生结果? 谢谢你。 问题答案: 首先,查询将返回 最低 薪水值。要返回最高薪水值,您必须更改为。 接下来,此查询的工作方式是:首先找到一个唯一的薪水值列表作为一个派生表,然后

  • 问题内容: 想知道如何编写SQL函数以查找表中的第N个最大元素,如果没有第N个最大元素,则返回Null。 使用MySQL / MySQL工作台。 顺便说一句,我的问题与第N个最高薪水问题不同,因为我还有一个附加要求,如果第N个最大元素不存在,则返回Null。任何想法表示赞赏。 预先感谢林 问题答案: 您可以这样做:

  • 我对这个代码有问题。它应该找到三个数字的GCF,但它在else语句中不断出现错误。

  • 本文向大家介绍n个整数的无序数组,找到每个元素后面比它大的第一个数,要求时间复杂度为O(N) ?相关面试题,主要包含被问及n个整数的无序数组,找到每个元素后面比它大的第一个数,要求时间复杂度为O(N) ?时的应答技巧和注意事项,需要的朋友参考一下