fork download
  1. // ~~ icebear ~~
  2. #include <bits/stdc++.h>
  3. using namespace std;
  4. #define int long long
  5.  
  6. typedef long long ll;
  7. typedef pair<int, int> ii;
  8. typedef pair<ii, int> iii;
  9.  
  10. #define FOR(i,a,b) for(int i=a; i<=b; ++i)
  11. #define FORR(i,a,b) for(int i=a; i>=b; --i)
  12. #define rep(i, n) for(int i=0; i<n; ++i)
  13. #define red(i, n) for(int i=n-1; i>=0; --i)
  14. #define mp make_pair
  15. #define pb push_back
  16. #define fi first
  17. #define se second
  18. #define task "icebearat"
  19.  
  20. const int MOD = 1e9 + 7;
  21. const int inf = 1e9 + 27092008;
  22. const ll LLinf = 1e18 + 27092008;
  23.  
  24. int pw(int x, int k){
  25. int res = 1;
  26. while(k){
  27. if (k & 1) res = res * x % MOD;
  28. x = x * x % MOD;
  29. k >>= 1;
  30. }
  31. return res;
  32. }
  33.  
  34. int sum(int l, int r){ // tính tổng từ l -> r
  35. l %= MOD;
  36. r %= MOD;
  37. // pw(2, MOD - 2) : nghịch đảo modulo. 1/a = a^(-1) đồng dư với a^(MOD - 2) theo modulo MOD
  38. return (r * (r + 1) % MOD * pw(2, MOD - 2) % MOD - l * (l - 1 + MOD) % MOD * pw(2, MOD - 2) % MOD + MOD) % MOD;
  39. }
  40.  
  41. int solve1(int n){
  42. int l = 1, res = 0;
  43. while(l <= n){
  44. int k = n / l;
  45. int r = n / k;
  46. res = (res + k * sum(l, r) % MOD) % MOD;
  47. l = r + 1;
  48. }
  49. return res;
  50. }
  51.  
  52. void solve(){
  53. int n; cin >> n;
  54. cout << solve1(n);
  55. }
  56.  
  57. signed main(){
  58. ios_base::sync_with_stdio(0);
  59. cin.tie(0); cout.tie(0);
  60. if (fopen(task".inp", "r")){
  61. freopen(task".inp", "r", stdin);
  62. freopen(task".out", "w", stdout);
  63. }
  64. int tc = 1;
  65. // cin >> tc;
  66. while(tc--) solve();
  67. return 0;
  68. }
  69.  
Success #stdin #stdout 4.92s 5320KB
stdin
Standard input is empty
stdout
441846227