我必须找到N的适当除数之和(N <= 20000000)。我已经预先计算了这个函数,其复杂度为O(N * log(N)),最多需要4秒。如何优化它或任何替代解决方案将被大大接受。
示例: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 :(得分:0)
我无法编辑我以前的评论,只是说我的评论引用的问题有点不同,但稍微调整它也回答了这个问题。 只需将除数本身在循环内部相乘。