给出一个已知为正整数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个顶点的数组的长度。)
答案 0 :(得分:4)
您可以仅使用整数来执行此操作,但是我怀疑这样做会更有效。您可以尝试找到最大的n,使n * n
答案 1 :(得分:0)
您可以仅使用math.Sqrt()函数执行以下操作:
func NFromK(k float64) int {
return int(math.Sqrt(k))
}