如何减少代码中的for循环次数

时间:2014-01-25 12:46:48

标签: c

如何使这个代码更有效,适用于大小的10 ^ 9。我认为我不能减少for循环次数。

#include <stdio.h>
int main(void) {

int e;
int t;
scanf("%d",&t);
for(e=0;e<t;e++){
        int x,y;
        scanf("%d",&x);
        scanf("%d",&y);
        int sum=0;
        int j,k,i;
        for(j=x;j<y;j++){
            for(k=j+1;k<=y;k++){
                int max=1;
                for(i=2;i<=j;i++)
                    if((j%i==0)&&(k%i==0))
                    max=i;
                sum+=max;
            }
        }
        printf("%d",sum);
    }
}

2 个答案:

答案 0 :(得分:1)

Euclid最大公约数算法是计算gcd最历史也可能是最有效的算法,它可以帮助你减少for循环次数。

答案 1 :(得分:0)

如果您说的输入大小非常大,您可以在进入循环之前手动对某些数字进行一些检查,这可能会在输入之前将数字循环减少10倍左右。 (即使在范围内检查小数字也可用作2 * x == x * 2)

也可以是10的5的倍数,依此类推可以在第一个循环中被否定。

如果您不能自带

,那么网络搜索会提供更多更好的算法

尝试在代码中添加一些注释,以便通过帮助您的人员付出的努力更容易理解。

注意: - 我没有完全通过您的代码,也没有人们会这样做。添加评论