如何执行计算除数的优化?

时间:2014-04-23 12:47:13

标签: c++ optimization

我有一项任务。我必须计算一个数字的所有整数除数,并将它们写入标准输出。我的程序有效,但在某些情况下会变慢。你知道如何进行优化吗?这是代码:

#include <cstdio>
int main()
{
    long n;
    scanf("%ld", &n);
    printf("1\n");
    for(long i = 2; i <= int(n/2); i++)
    {
        if (n % i == 0)
            printf("%ld\n", i);
    }
    printf("%ld", n);
}

1 个答案:

答案 0 :(得分:3)

自然数的除数成对出现:对中的一半是i <= sqrt(n),另一半是(n / i) >= sqrt(n)。接下来,您可以循环到n而不是n/2的平方根,然后报告in/i

[旁白:您使用long代表n,但随后您将n/2投放到int。在sizeof(long) > sizeof(int)的平台上,您将失去精确度。]