埃氏筛+dp
首先是埃氏筛
借用埃氏筛的性质易得转移方程
dp[j]=dp[j/i]*log(i)+i
#include<bits/stdc++.h>
using namespace std;
long long f[4004004];
long long mod=1e9+7;
int n;
int cal(int x)
{
int ans=10;
for (int i=1;i<=x;i++) ans*=10;
return ans;
}
int main()
{
cin>>n;
for (int i=2;i<=n;i++)
{
if (f[i]==0)
{
f[i]=i;
for (int j=i+i;j<=n;j+=i)
{
f[j]=((f[j/i]*cal(log10(i))%mod)+i)%mod;
}
}
}
long long ans=0;
for (int i=2;i<=n;i++) ans=(ans+f[i])%mod;
cout<<ans<<endl;
}