数列为 A061201,下面的 FORMULA 中有一栏:
To compute a(n) for huge n (see A180365) in sublinear use a(n) = 3*Sum_{i=1..n3} A006218(n/i) - Sum_{j=1..n3} floor(n/(i*j)) + n3^3, where n3 = floor(n^(1/3)). - Andrew Lelechenko, Apr 15 2011
接着找到 A006218:
a(n) = 2*(Sum_{i=1..floor(sqrt(n))} floor(n/i)) - floor(sqrt(n))^2. - Benoit Cloitre, May 12 2002
AC code:
#include<bits/stdc++.h>
#define int long long
using namespace std;
int n;
int sol(int n){
int sn=sqrt(n),sum1=0;
for(int i=1;i<=sn;i++){
sum1+=n/i;
}
return 2*sum1-sn*sn;
}
signed main()
{
ios::sync_with_stdio(false);
cin.tie(0);
cout.tie(0);
cin>>n;
int n3=cbrt(n),sum1=0,sum2=0;
for(int i=1;i<=n3;i++){
sum1+=sol(n/i);
}
for(int i=1;i<=n3;i++){
for(int j=1;j<=n3;j++){
sum2+=n/(i*j);
}
}
cout<<3*sum1-3*sum2+n3*n3*n3;
}