具体的题目不记得在哪了。就是给你一个n,让你求n!中所有质因数的和。
其实做法就是在素数筛选法的过程中用递推公式全部预处理出来即可。对于质数,a[i]=i,对于合数,a[i*j]=a[i]+a[j]。
int a[N];
void Init(){
for(int i=2;i<N;i++)
a[i] = i;
for(int i=2;i*i<N;i++){
for(int j=i;i*j<N;j++)
a[i*j] = a[i]+a[j];
}
}
int main(){
freopen("in.txt","r",stdin);
// freopen("out.txt","w",stdout);
Init();
while(sf(n)!=EOF){
ll ans=0;
for(int i=2;i<=n;i++){
ans += a[i];
}
printf("%I64d\n",ans);
}
return 0;
}