题目描述:
思路:
就采用跟素数筛选法差不多的方法,爆力求解,从2开始一直到n,求出每个数乘以1,2,3…直到乘得的结果小于n,以所得到的结果的数组下标加1,用一个数组记录每个数的因子个数.
代码
#include <bits/stdc++.h>
#define ll long long
using namespace std;
int a[10000001];
int main()
{
ios::sync_with_stdio(0);cin.tie(0), cout.tie(0);
ll n;
cin>>n;
a[1]=1;
a[2]=2;
for (ll i=2;i<n;i++){
ll k=2;
//求出以i为因子的所有倍数
for (ll j=i*k;j<=n;j=i*k){
a[j]++;
k++;
}
}
ll ans=0;
for (ll i=1;i<=n;i++){
if(i>2)a[i]+=2; //再加上1和本身
ans=ans+a[i]*i;
}
cout<<ans<<endl;
}