给定整数n的n *(n + 1),有效地找到n

时间:2019-12-14 19:36:35

标签: algorithm

给出一个已知为正整数n的整数k(已知形式为k = n *(n + 1)),我想找到值n。从数学上讲,解决方案是n = (sqrt(1+4*k)-1)/2,但要直接实现此功能,需要将中间值转换为浮点数,然后再转换回整数。例如,在Go中,可以为implemented as follows

func NFromK(k int) int {
    return int((math.Sqrt(float64(1+4*k))-1)/2 + 0.5)
}

有没有更有效的方法?也许只能使用整数算术找到解决方案?

(在我的应用程序中,k是存储n维单形的n + 1个顶点的数组的长度。)

2 个答案:

答案 0 :(得分:4)

您可以仅使用整数来执行此操作,但是我怀疑这样做会更有效。您可以尝试找到最大的n,使n * n

答案 1 :(得分:0)

您可以仅使用math.Sqrt()函数执行以下操作:

   func NFromK(k float64) int {
        return int(math.Sqrt(k))
    }