51nod1225 余数之和
打表可以看出规律。分块求就可以了。
#include<cstdio> #include<cstring> #include<cctype> #include<algorithm> using namespace std; #define ll long long ll read(){ ll x=0;char c=getchar(); while(!isdigit(c)) c=getchar(); while(isdigit(c)) x=x*10+c-'0',c=getchar(); return x; } const ll mod=1e9+7; const ll tt=5e8+4; int main(){ ll n=read(),last,ans=0; for(ll i=1;i<=n;i=last+1){ last=n/(n/i); ans=(ans+(last-i+1)%mod*((n%i+n%last)%mod)%mod*tt%mod)%mod; } printf("%lld\n",ans); return 0; }
F(n) = (n % 1) + (n % 2) + (n % 3) + ...... (n % n)。其中%表示Mod,也就是余数。
例如F(6) = 6 % 1 + 6 % 2 + 6 % 3 + 6 % 4 + 6 % 5 + 6 % 6 = 0 + 0 + 0 + 2 + 1 + 0 = 3。
给出n,计算F(n), 由于结果很大,输出Mod 1000000007的结果即可。
Input
输入1个数N(2 <= N <= 10^12)。
Output
输出F(n) Mod 1000000007的结果。
Input示例
6
Output示例
3