大数据T了 只有60分 该怎么优化啊大佬们
#include<bits/stdc++.h>
using namespace std;
#define rep(i,a,b) for(int i=(a);i<=(b);i++)
#define dwn(i,a,b) for(int i=(a);i>=(b);i--)
const int N=2e7+10;
int n1,m;
int p[N];
int d[N];
int v[N],prime[N];
void euler(int n)
{
m=0;
rep(i,2,n)
{
if(v[i]==0)
{
v[i]=i,prime[++m]=i;
p[i]=i-1;
}
rep(j,1,m)
{
if(prime[j]>v[i]||prime[j]>n/i)break;
v[i*prime[j]]=prime[j];
p[i*prime[j]]=p[i]*(i%prime[j]?prime[j]-1:prime[j]);
}
}
}
double get_ans(int x)
{
int len=log10(x)+1;
double k=len*log2(len);
int idx=floor(n1/x);
return k+d[idx];
}
void solve()
{
double ans=0;
rep(i,1,n1)
{
ans+=get_ans(i)*p[i];
//cout<<ans<<endl;
}
printf("%.7lf",ans);
}
int main()
{
cin>>n1;
p[1]=1;
d[0]=0;
euler(n1);
rep(i,1,n1)
{
int len=log10(i)+1;
d[i]=d[i-1]+len;
}
solve();
return 0;
}