2016-04-28 54 views
0

我必須找到合適的除數N(N < = 20000000)。我已經預先計算了複雜度爲O(N * log(N))的這個函數,這需要4秒鐘。我如何優化它或任何備用解決方案將被大力接受。合適的除數N的總和

實施例:N = 10的回答是86,N = 1000的答案是823080

int f(){ 
    for(LL i = 1; i <= m; i++){ 
     for(LL j = i; j <= m; j += i){ 
      ans[j] += i; 
     } 
    } 
    for(LL i = 2; i <= m; i++)  ans[i] += ans[i - 1]; 
} 

我也使用質數分解和this式試過,但它需要更多的時間比上述算法。

+0

此問題已得到很好的回答: http://stackoverflow.com/questions/7323572/how-to-find-total-number-of-divisors-upto-n/8337647#8337647 – emilio

回答

0

我不能編輯我以前的評論,只是說我的評論引用的問題有點不同,但稍作調整就能回答這個問題。 只需在除數內部乘以循環內部即可。