这道题,难道不是一眼秒吗233。
当时学校模拟赛,1分钟打完233。
for(int i=1;i<=n;i++)
ans+=(n/i)*i;
即可。。
不过,我为了练习一下欧拉函数233。
作个死吧。。
#include<bits/stdc++.h>
using namespace std;
int prime[1000001],d[1000001],sum[1000001],siz;
int n,Ans;
bool P[1000001];
void init()
{
siz=0;
memset(P,true,sizeof(P));
P[1]=false;
sum[1]=1;
for(int i=1;i<=1000000;i++)
{
if(P[i])
{
prime[++siz]=i;
d[i]=1;
sum[i]=2;
}
for(int j=1;j<=siz&&prime[j]*i<=1000000;j++)
{
P[prime[j]*i]=false;
if(i%prime[j]==0)
{
sum[i*prime[j]]=sum[i]/(d[i]+1)*(d[i]+2);
d[i*prime[j]]=d[i]+1;
break;
}
sum[i*prime[j]]=sum[i]*2;
d[i*prime[j]]=1;
}
}
}
int main()
{
//freopen("a.in","r",stdin);
//freopen("a.out","w",stdout);
init();
scanf("%d",&n);
for(int i=1;i<=n;i++)
Ans+=sum[i];
cout<<Ans;
return 0;
}
慢逼了233。