【数论】求一个数的因子之和
2020-06-13 20:32:00 # ACM

直接求解

1
2
3
4
5
6
7
8
9
10
LL factor(LL x){
LL cnt = 0;
for(int i=1;i<=sqrt(x);i++){
if(x%i==0){
if(x/i == i) cnt += i; // ex: 9 = 3 * 3
else cnt += i + x/i;
}
}
return cnt;
}

筛法

1
2
3
4
5
6
7
8
9
10
11
LL sum[MS];

void factor_sieve(){ // sum[i] 记录 数 i 的各个因子之和
for(int i=1;i<=MS;i++) sum[i] = i;
for(int i=2;i<=MS;i++){
sum[i]++;
for(int j=i+i;j<=MS;j+=i){
sum[j] += i;
}
}
}
Prev
2020-06-13 20:32:00 # ACM
Next