如何优化计算除数

How to perform optimization of computing divisors?

本文关键字:计算 优化 何优化      更新时间:2023-10-16

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

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

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

[旁白:您使用long来表示n,但随后将n/2强制转换为int。在使用sizeof(long) > sizeof(int)的平台上,您会失去精度。]