2014-01-25 53 views
-2

如何使此代碼對於大小爲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); 
    } 
} 
+6

你的代碼是做什麼的?如果你需要更好的算法,我們需要一個適當的問題描述。 –

+0

嘿,它是2014年,僅僅在C風格變得過時之後60年。您可以在需要它們的地方聲明變量,而不是將它們泄漏到整個地方。 (int e = 0; e <++; ++ e)等。 –

+0

我想構建一個算法,用於計算用戶輸入的包含範圍內所有可能的最大公約數的總和。 – user3234939

回答

0

如果輸入的大小是非常巨大的,你說,你可以進入循環前手工做一些數字進行一些檢查,並可能減少進入前循環的次數由10次左右。 (即使在範圍檢查小數字將有用的2 * x == x * 2)

也可以是10的5的倍數等等可以否定在第一個循環。

好很多算法都可以在網上搜索多一點,如果你不能拿出你自己的

嘗試添加在你的代碼幾點意見所以它可能是由人幫助你較少的努力更容易理解。

注意: - 我沒有完整地瀏覽您的代碼,也沒有大部分人會這樣做。 添加評論

1

Euclid最大公約數算法是歷史最久,也許是計算gcd最有效的算法,它可以幫助您減少for循環次數。