数论分块
现在我们要求这玩意
,其中N<=1000000000000.
直接搞是肯定T的,观察会发现它很多值都是一样的,所以可以分块搞。
引入定理:1.的取值最多有
种。
2.设,则
为
。
#include <bits/stdc++.h>
using namespace std;
typedef long long ll;
int main()
{
ll n;
scanf("%lld",&n);
ll ans=0;
ll tmp=1;
for(ll i=1;i<=n;i=tmp+1)
{
tmp=n/(n/i);
ll temp=(n/i)*(tmp-i+1);
ans+=temp;
}
printf("%lld\n",ans);
return 0;
}

浙公网安备 33010602011771号