我写了个O(nlogn),T成80/kel
#include<bits/stdc++.h>
using namespace std;
typedef __int128 ll;
ll n,ans;
char ss[1<<17],*A=ss,*B=ss;
inline char gc(){return A==B&&(B=(A=ss)+fread(ss,1,1<<17,stdin),A==B)?-1:*A++;}
inline void read(register ll&x){
x=0;char s=gc();
while(!isdigit(s))s=gc();
while(isdigit(s))x=x*10+(s^'0'),s=gc();
}
void print(register ll x){
if(x>9)print(x/10);
putchar(x%10|'0');
}
ll gcd(ll x,ll y){return !y?x:gcd(y,x%y);}
inline ll sum(ll x){return x-x/2-x/5+x/10;}
inline ll calc(ll x){
ll ret=0;
for(ll t=1;t<=x;t*=2)ret+=ll(log2((double)ll(x/t))/log2(5))+1;
return ret;
}
int main(){
read(n);
for(ll l=1,r;l<=n;l=r+1){
r=n/(n/l);
ans+=n/l*calc(n/l)*(sum(r)-sum(l-1));
}
print(ans);
return 0;
}
ps.禁止无意义回复。