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
#include <iostream>
#include <cstring>
using namespace std;
typedef long long int ll;
int MOD = 1e9 + 7;
int INV = 5e8 + 4;
ll n;
ll result = 0;
ll sum(ll l, ll r)
{
return ((l + r) % MOD) * ((r - l + 1) % MOD) % MOD * INV % MOD;
}
int main()
{
cin >> n;
result = (n % MOD) * (n % MOD) % MOD;
ll last = 0;
for (ll i = 1; i <= n; i = last + 1)
{
last = n / (n / i);
result += MOD -(n / i) * sum(i, last) % MOD;
result %= MOD;
}
cout << result << endl;
return 0;
}