嵌套循环c ++

时间:2018-05-18 12:32:26

标签: c++ loops nested-loops compiler-optimization

熟悉循环的人是否可以说如何优化此任务 - 至少有一点?也许一些缓存?或循环切换? 内存限制512米

#include <iostream>
using namespace std;

const int MOD = 1000000007;

int main() {
    int n;
    cin >> n;
    int x = 0;
    for (int i = 0; i < n; ++i) {
        for (int j = i; j < n; ++j) {
            for (int k = i; k <= j; ++k) {
                x = (x + 1) % MOD;
            }
        }
    }
    cout << x << endl;
}

感谢任何帮助

1 个答案:

答案 0 :(得分:2)

一个简单的WolframAlpha query为你正在计算的循环提供了一个闭式表达式:

x = (1/6 * n * (n + 1) * (n + 2)) % MOD

请在StackOverflow上给我们MathJax支持!

然后,只需将闭合形式的表达式转换为代码即可。因为我们不希望x溢出,所以我们必须在操作结束之前偶尔执行模数:

long long x = n % MOD;
x = (x * (n + 1)) % MOD;
x = (x * (n + 2) / 6) % MOD;

有了这个,数学运算的数量与n的大小无关,当然比你的循环快得多。