fork download
  1. #pragma GCC optimize("Ofast,unroll-loops")
  2. #pragma GCC target("avx2,tune=native")
  3.  
  4. #include <bits/stdc++.h>
  5. using namespace std;
  6.  
  7. #define ff(i, a, b) for(auto i=(a); i<=(b); ++i)
  8. #define ffr(i, b, a) for(auto i=(b); i>=(a); --i)
  9. #define nl "\n"
  10. #define ss " "
  11. #define mp make_pair
  12. #define pb emplace_back
  13. #define fi first
  14. #define se second
  15. #define sz(s) (int)s.size()
  16. #define all(s) (s).begin(), (s).end()
  17. #define ms(a,x) memset(a, x, sizeof (a))
  18. #define cn continue
  19. #define re exit(0)
  20.  
  21. typedef long long ll;
  22. typedef unsigned long long ull;
  23. typedef long double ld;
  24. typedef vector<int> vi;
  25. typedef vector<ll> vll;
  26. typedef pair<int, int> pii;
  27. typedef pair<ll, ll> pll;
  28. typedef vector<pii> vpii;
  29. typedef vector<pll> vpll;
  30.  
  31. const int mod=1e9+7;
  32. const int mod2=998244353;
  33. const int maxn=1e5+105;
  34. const int maxm=4*maxn+5;
  35. const ll inf=1e16;
  36.  
  37. void rf(){
  38. ios_base::sync_with_stdio(false);
  39. cin.tie(nullptr); cout.tie(nullptr);
  40. if(fopen("o.in","r")){
  41. freopen("o.in","r",stdin);
  42. freopen("o.out","w",stdout);
  43. }
  44. }
  45.  
  46. mt19937_64 rng(chrono::steady_clock::now().time_since_epoch().count());
  47. ll ran(ll l, ll r)
  48. {
  49. return uniform_int_distribution<ll> (l, r)(rng);
  50. }
  51.  
  52. template <typename T> void add(T &x, const T &y)
  53. {
  54. x+=y;
  55. if(x>=mod) x-=mod;
  56. if(x<0) x+=mod;
  57. }
  58.  
  59. template <typename T> bool maxi(T &a, T b)
  60. {
  61. if(a>=b) return 0;
  62. a=b; return 1;
  63. }
  64.  
  65. template <typename T> bool mini(T &a, T b)
  66. {
  67. if(a<=b) return 0;
  68. a=b; return 1;
  69. }
  70.  
  71. signed main()
  72. {
  73. rf();
  74. ll n; cin>>n;
  75. ll ans=0;
  76. ll cur=1;
  77. ll inv2 = 500000004;
  78. while(cur<=n)
  79. {
  80. ll id = n / (n / cur);
  81.  
  82. ll sum_i = ((id + cur) % mod) * ((id - cur + 1) % mod) % mod;
  83. sum_i = sum_i * inv2 % mod;
  84.  
  85. ll cnt = n / cur;
  86. cnt = (cnt % mod) * ((cnt + 1) % mod) % mod;
  87. cnt = cnt * inv2 % mod;
  88.  
  89. ll s = sum_i * cnt % mod;
  90. add(ans, s);
  91.  
  92. cur = id + 1;
  93. }
  94. cout<<ans;
  95. re;
  96. }
Success #stdin #stdout 0.01s 5312KB
stdin
#pragma GCC optimize("Ofast,unroll-loops")
#pragma GCC target("avx2,tune=native")

#include <bits/stdc++.h>
using namespace std;

#define ff(i, a, b) for(auto i=(a); i<=(b); ++i)
#define ffr(i, b, a) for(auto i=(b); i>=(a); --i)
#define nl "\n"
#define ss " "
#define mp make_pair
#define pb emplace_back
#define fi first
#define se second
#define sz(s) (int)s.size()
#define all(s) (s).begin(), (s).end()
#define ms(a,x) memset(a, x, sizeof (a))
#define cn continue
#define re exit(0)

typedef long long ll;
typedef unsigned long long ull;
typedef long double ld;
typedef vector<int> vi;
typedef vector<ll> vll;
typedef pair<int, int> pii;
typedef pair<ll, ll> pll;
typedef vector<pii> vpii;
typedef vector<pll> vpll;

const int mod=1e9+7;
const int mod2=998244353;
const int maxn=1e5+105;
const int maxm=4*maxn+5;
const ll inf=1e16;

void rf(){
    ios_base::sync_with_stdio(false);
    cin.tie(nullptr); cout.tie(nullptr);
    if(fopen("o.in","r")){
        freopen("o.in","r",stdin);
        freopen("o.out","w",stdout);
    }
}

mt19937_64 rng(chrono::steady_clock::now().time_since_epoch().count());
ll ran(ll l, ll r)
{
    return uniform_int_distribution<ll> (l, r)(rng);
}

template <typename T> void add(T &x, const T &y)
{
    x+=y;
    if(x>=mod) x-=mod;
    if(x<0) x+=mod;
}

template <typename T> bool maxi(T &a, T b)
{
    if(a>=b) return 0;
    a=b; return 1;
}

template <typename T> bool mini(T &a, T b)
{
    if(a<=b) return 0;
    a=b; return 1;
}

signed main()
{
    rf();
    ll n; cin>>n;
    ll ans=0;
    ll cur=1;
    ll inv2 = 500000004; 
    while(cur<=n)
    {
        ll id = n / (n / cur);
        
        ll sum_i = ((id + cur) % mod) * ((id - cur + 1) % mod) % mod;
        sum_i = sum_i * inv2 % mod;
        
        ll cnt = n / cur; 
        cnt = (cnt % mod) * ((cnt + 1) % mod) % mod;
        cnt = cnt * inv2 % mod;
        
        ll s = sum_i * cnt % mod;
        add(ans, s);
        
        cur = id + 1;
    }
    cout<<ans;
    re;
}
stdout
Standard output is empty