60分暴力
#include<cstdio>
#include<iostream>
#include<cstring>
#include<cmath>
#define ll long long
using namespace std;
ll n,ans=0;
bool used[1000000+5];
ll f[1000000+5];
ll cnt[1000000+5];
int main()
{
freopen("a.in","r",stdin);
freopen("a.out","w",stdout);
memset(f,0,sizeof(f));
scanf("%lld",&n);
for(ll i=1;i<=n;i++)
{
for(ll j=1;j<=i;j++)
{
if(i%j==0)
cnt[j]++;
}
}
for(ll i=1;i<=n;i++)
{
if(cnt[i]>0)
{
if(f[i]==0)
for(ll j=1;j<=i;j++)
{
if(i%j==0)
f[i]++;
}
ans+=f[i]*cnt[i];
}
}
printf("%lld\n",ans);
fclose(stdin);
fclose(stdout);
return 0;
}
满分做法:
#include<cstdio>
#include<iostream>
#define ll long long
using namespace std;
int n,now=0,ans=0;
int main()
{
scanf("%d",&n);
for(int i=1;i*i<=n;i++)
{
now+=n/(i*i);
int tmp=n/i;
if(i*i<=tmp) now--,ans++;
}
ans+=now*3;now=0;
for(int i=1;i*i*i<=n;i++)
{
for(int j=i+1;j*j*i<=n;j++)
{
now+=n/(i*j)-j;
}
}
ans+=now*6;
printf("%d\n",ans);
}