c++ - 需要一种方法让这段代码运行得更快

标签 c++ algorithm math

我正在尝试解决 Project Euler problem 401 .他们唯一能找到解决方法的方法就是蛮力。我一直在运行此代码大约 10 分钟,但没有得到任何答复。任何人都可以帮助我改进它。

代码:

#include <iostream>
#include <cmath>
#define ull unsigned long long

using namespace std;

ull sigma2(ull n);
ull SIGMA2(ull n);

int main()
{
    ull ans = SIGMA2(1000000000000000) % 1000000000;

    cout << "Answer: " << ans << endl;

    cin.get();
    cin.ignore();

    return 0;
}

ull sigma2(ull n)
{
    ull sum = 0;
    for(ull i = 1; i<=floor(sqrt(n)); i++)
    {
        if(n%i == 0)
        {
            sum += (i*i)+((n/i)*(n/i));
        }
        if(i*i == n)
        {
            sum -= n;
        }
    }
    return sum;
}

ull SIGMA2(ull n)
{
    ull sum = 0;
    for(ull i = 1; i<=n; i++)
    {
        sum+=sigma2(i);
    }
    return sum;
}

最佳答案

您缺少一些分隔符,如果 a/b=c,并且 ba 的分隔符,那么 c 也将是ac 的分隔符可能大于 floor(sqrt(a)),例如 3 > floor(sqrt(6))但除以 6。

那么你应该把你的 floor(sqrt(n)) 放在一个变量中并在 for 中使用该变量,否则你会在每个操作中重新计算它,这是非常昂贵的。

关于c++ - 需要一种方法让这段代码运行得更快,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20685041/

相关文章:

c++ - 我想要在 Linux/C/C++ 中有一个任意大的缓冲区

java - 如何在Java上检索显卡信息?

algorithm - 分析运行时间,Big O

php - 四舍五入到最接近的结尾数字

math - 如何计算等距矩形/正方形的高度和宽度

c# - 以编程方式断开远程桌面 session

java - ZeroMQ 基本的 Request-Reply 实现

php - 如何在不到 1 分钟的时间内在 PHP 中计算 0 到 100000000 之间的质数?

algorithm - 如何从 2 个列表中确定最佳组合

c++ - 任意精度 Gamma 函数