首页 > 解决方案 > 优化乘法和加法

问题描述

我正在使用 C 并且我有两个非负整数 n 和 m(都 >= 0,n < 500)。我需要形成产品

n*(n+1)/2 + m

这将需要数亿次,所以我想尽可能地优化它。我目前的实现是:

inline int func(const int n, const int m) { return ( (n*(n+1) >> 1) + m); }

使用inline>> 1来除以 2。有没有其他方法可以加快计算速度?

标签: coptimization

解决方案


鉴于这n将少于 500,您可以预先计算 的所有可能值n*(n+1)/2并将它们放在一个表中,然后使用该表执行计算:

int n_sum[500];

// call this once at program start
void init_sum()
{
    int i;
    for (i=0;i<500;i++) {
        n_sum[i] = i*(i+1)/2;
    }
}

inline int func(const int n, const int m)
{ 
    return n_sum[n] + m;
}

推荐阅读