如何使这个代码更有效,适用于大小的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);
}
}
答案 0 :(得分:1)
Euclid最大公约数算法是计算gcd最历史也可能是最有效的算法,它可以帮助你减少for循环次数。
答案 1 :(得分:0)
如果您说的输入大小非常大,您可以在进入循环之前手动对某些数字进行一些检查,这可能会在输入之前将数字循环减少10倍左右。 (即使在范围内检查小数字也可用作2 * x == x * 2)
也可以是10的5的倍数,依此类推可以在第一个循环中被否定。
如果您不能自带
,那么网络搜索会提供更多更好的算法尝试在代码中添加一些注释,以便通过帮助您的人员付出的努力更容易理解。
注意: - 我没有完全通过您的代码,也没有人们会这样做。添加评论