algorithm - 给定整数 n 的 n*(n+1),有效地找到 n
问题描述
给定一个整数 k,对于正整数 n,已知其形式为 k = n * (n+1),我想找到值 n。在数学上,解决方案是n = (sqrt(1+4*k)-1)/2
,但直接实现它需要将中间值转换为浮点数,然后再转换回整数。例如,在 Go 中,这可以实现如下:
func NFromK(k int) int {
return int((math.Sqrt(float64(1+4*k))-1)/2 + 0.5)
}
有没有更有效的方法?也许只能使用整数算术找到解决方案?
(在我的应用程序中,k 是存储 n 维单纯形的 n+1 个顶点的数组的长度。)
解决方案
你可以只用整数来做到这一点,但我怀疑它会更有效。您可以尝试找到最大的 n,使得 n*n < k,这可以通过空间 1 - k/2 的二进制搜索来完成。
推荐阅读
- java - 无法在生成的 JAR 中找到主类
- go - 为什么即使左侧没有定义新变量,else if 语句中的短变量声明也不会编译失败?
- asp.net - Chrome 最新版本不会清除 cookie ASP.NET
- javafx - 在下面的代码中,在文本字段的整数和双精度值之间进行计算时如何应用双向方法?
- google-cloud-platform - AI 平台无详细信息 - 当前尝试发生内部错误
- python - ALT + s 不适用于 IE selenium 驱动程序 python
- r - 如何在 R 3.4.0 中安装“devtools”包?
- python - 如何使用 Discord 编写音乐机器人,py 重写而不下载歌曲
- mysql - How to fetch a value from the last element inside MySQL JSON document?
- css - 在 Woo 变化表插件中将 css 类添加到产品属性