数论分块
现在我们要求这玩意
,其中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; }