1494-约数研究
本文总阅读量次
题目要求
当一个数第一次被划到的时候,不就是第二小因数吗?(筛法因数从小到大枚举,先被划到的必然是除
所以,筛法原本用
for(int i = 2; i <= sqrt(n); i++){
if(a[i]==0){
for(int j = i*2; j <= n; j += i){
if(a[j] == 0) a[j] = i; //首次被划到,表示第二小因数
}
}
}
最后扫描筛选数组。
for(int i = 2; i <= n; i++){
if(a[i] > 0) ans += a[i];
else ans += i; //质数,第二小因数就是本身
}
还需要注意,答案可能会很大,需要用