You need to enable JavaScript to run this app. 如何找到大于等于给定值N的最小三角数?
优惠活动
大模型
产品
解决方案
定价
更多

如何找到大于等于给定值N的最小三角数?

不小于给定值N的最小三角数计算逻辑

三角数的基础定义为:第m个三角数的计算公式为 T_m = m*(m+1)/2,其中m为正整数,三角数序列随m增大单调递增。
原有方法的设计目标是计算与N距离最近的三角数,核心操作是对sqrt(2*N)做向下取整得到m,再代入三角数公式计算结果,因此在N处于两个相邻三角数区间时,很容易返回比N小的前一个三角数(比如N=7时返回T3=6),无法满足“不小于N的最小三角数”的场景需求。

正确计算步骤

  • 需求转换:找到能满足T_m >= N的最小正整数m,代入公式得到的T_m就是目标结果。
  • 公式推导:对不等式m*(m+1)/2 >= N做变形,求解对应的二次方程正根:
    展开不等式可得 m² + m - 2N >= 0,代入二次方程求根公式,得到实数域的临界值 m0 = (sqrt(8*N + 1) - 1) / 2。
  • 整数取值:因为m必须是正整数,对临界值m0执行编程语言通用的ceil()向上取整操作,即可得到满足不等式的最小整数m。
  • 精度兜底(推荐):受浮点数计算精度影响,临界值计算可能存在微小误差(比如当8*N+1本身是完全平方数时,sqrt计算结果可能存在±1e-12级的偏差),拿到m值后可回算一次T_m,若相邻m值对应的三角数也满足不小于N的要求,可调整m取最小匹配值,避免临界场景的计算错误。

计算效果验证

  • 输入N=7:代入公式得8*7+1=57,sqrt(57)≈7.55,m0≈3.27,向上取整得m=4,计算得T4=10,符合预期。
  • 输入N=6(本身为三角数):代入得8*6+1=49,sqrt(49)=7,m0=3,向上取整得m=3,计算得T3=6,刚好匹配N值。
  • 输入N=11:代入得8*11+1=89,sqrt(89)≈9.43,m0≈4.22,向上取整得m=5,计算得T5=15,是不小于11的最小三角数。

内容的提问来源于stack exchange,提问作者felix

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.30 18:36:10