You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

统计边长小于N的不等边三角形总数 求O(n)高效C++实现算法

不等边三角形计数O(1)优化方案

问题明确

我们需要统计满足 a < b < c < N 且 a + b > c 的正整数三元组总数量,也就是所有边长严格小于N的不等边三角形个数,默认按边长升序排列避免重复计数。

优化思路

原O(n²)算法在N=1e5时运算量达到1e10级别,会严重超时。我们可以通过数学推导直接得到闭式解,时间复杂度降到O(1),远优于要求的O(n)。
对固定最长边c的符合条件的二元组(a,b)求和后,最终得到无误差的整数计算公式:

  • 当 N 为偶数时:总数量 = N * (N - 2) * (2 * N - 5) / 24
  • 当 N 为奇数时:总数量 = (N - 1) * (N - 3) * (2 * N - 1) / 24
    注:N最大为1e5时计算结果约为4e13,远超32位int的存储上限,必须用64位长整型存储结果

优化后代码

typedef long long ll;
ll solve(int n) {
    if (n < 4) return 0; // 边长均小于4时不存在符合要求的不等边三角形
    ll res;
    if (n % 2 == 0) {
        res = (ll)n * (n - 2) * (2 * n - 5) / 24;
    } else {
        res = (ll)(n - 1) * (n - 3) * (2 * n - 1) / 24;
    }
    return res;
}

正确性验证

  • N=4:返回0,符合预期
  • N=5:返回1,对应唯一三角形(2,3,4),符合预期
  • N=6:返回3,对应三角形(2,3,4)、(2,4,5)、(3,4,5),符合预期

内容的提问来源于stack exchange,提问作者Dũng Nguyễn

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.04 04:57:03