2014-04-23 36 views
-1

我有一個任務。我必須計算一個數字的所有整數因子並將它們寫入標準輸出。我的程序有效,但在某些情況下會變慢。你知道如何執行優化嗎?下面的代碼:如何執行計算除數的優化?

#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); 
} 
+0

僅供參考。這種類型的問題更適合[代碼評論](http://codereview.stackexchange.com/)。 –

+1

如果2是除數,那麼我可以立即告訴你另一個除數。那會是哪一個? – gnasher729

+0

@ gnasher729'n/2'? – enedil

回答

3

進來對自然數的約數:在對的一半是i <= sqrt(n),另一個是(n/i) >= sqrt(n)。因此,您可以循環到n的平方根而不是n/2,然後報告in/i

[Aside:you're using long to n,but then you cast n/2 to int。在sizeof(long) > sizeof(int)的平臺上,您將失去精確度。]