Problem p02624 (C++) — buggy submission, verdict: Time Limit Exceeded

#define _CRT_SECURE_NO_WARNINGS

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

typedef unsigned int uint;
typedef long long ll;
typedef long double ld;
typedef unsigned long long ull;
typedef pair<int, int> ii;
typedef vector<int> vi;
typedef vector<ll> vll;
typedef vector<string> vs;
typedef vector<ii> vii;
typedef vector<vi> vvi;
typedef map<int, int> mii;
typedef map<string, int> msi;
typedef map<int, string> mis;
typedef pair<int, ii> edge;

#define sc(x) scanf("%d", &x)
#define scl(x) scanf("%lld", &x)
#define all(v) v.begin(), v.end()
#define rall(v) v.rbegin(), v.rend()
#define mem(arr, val) memset(arr, val, sizeof arr)
#define sz(v) (int)v.size()
#define rsz(v) v.resize
#define clr(v) v.clear()
#define rev(v) reverse(all(v))
#define lop(i, end) for (int i = 0; i < end; i++)
#define rlop(i, start) for (int i = start - 1; i >= 0; i--)
#define loop(i, start, end) for (int i = start; i < end; i++)
#define rloop(i, start, end) for (int i = start - 1; i >= end; i--)
#define PB push_back
#define pb pop_back
#define mP make_pair
#define f first
#define s second

const ll OO = (ll)(4e18) + 9;
const int MOD = (int)(1e9) + 7;
const int oo = 2147483647;
const double EPS = 1e-8;
const double PI = acos(-1.0);

// enum dir { d, r, u, l , dr, ur, dl, ul };
int dx[] = {1, 0, -1, 0, 1, -1, 1, -1};
int dy[] = {0, 1, 0, -1, 1, 1, -1, -1};

string abc = "abcdefghijklmnopqrstuvwxyz";
string vowels = "aeiouy"; // and sometimes "aeiouy"

template <typename X, typename Y> bool ckmin(X &a, Y b) {
  return a > b ? a = b, true : false;
}
template <typename X, typename Y> bool ckmax(X &a, Y b) {
  return a < b ? a = b, true : false;
}

int dcmp(ld d1, ld d2) {
  return fabs(d1 - d2) <= EPS ? 0 : d1 > d2 ? 1 : -1;
} // Compare Double Numbers
ll gcd(ll x, ll y) { return !y ? x : gcd(y, x % y); }
ll lcm(ll a, ll b) { return a * (b / gcd(a, b)); }
// convert index from 2D array to 1D array. (Zero-indexed)
int conv_2_1(int r, int c, int nCol) { return (nCol * r) + c + 1; }
// convert index from 1D array to 2D array. (Zero-indexed)
ii conv_1_2(int n, int nCol) {
  int r = n / nCol, c = n % nCol;
  return ii(r, c);
}

void inter(string s) {
  cout << s << endl;
  fflush(stdout);
}

const int NN = 2e6 + 10;
ll fact[NN];

void init() {
  fact[0] = 1;
  for (int i = 1; i < NN; ++i)
    fact[i] = (fact[i - 1] * 1LL * i) % MOD;
}

ll nCr(ll n, ll r) {
  auto modInverse = [](ll a) {
    auto power = [](ll base, ll exp) {
      ll ans = 1;
      base %= MOD;
      while (exp > 0) {
        if (exp & 1)
          ans = (ans * base) % MOD;
        exp >>= 1;
        base = (base * base) % MOD;
      }
      return ans;
    };
    return power(a, MOD - 2);
  };
  return (fact[n] * modInverse(fact[r] * 1LL * fact[n - r])) % MOD;
}

int main() {
#ifndef ONLINE_JUDGE

#else
  // freopen("pyramid.in", "r", stdin);
#endif
  // freopen("in.txt", "r", stdin);
  // freopen("out.txt", "w", stdout);
  ios_base::sync_with_stdio(false);
  cin.tie(NULL);
  int n;
  cin >> n;
  ll ans = 0;
  for (int i = 1; i <= n; i++) {
    ll mn = i;
    ll mx = n / i * i;
    ll k = mx / i - mn / i + 1;
    ans += i * 1ll * k * (k + 1) / 2;
  }
  cout << ans << endl;

  return 0;
}


Error: TLE

Fixed submission:

#define _CRT_SECURE_NO_WARNINGS

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

typedef unsigned int uint;
typedef long long ll;
typedef long double ld;
typedef unsigned long long ull;
typedef pair<int, int> ii;
typedef vector<int> vi;
typedef vector<ll> vll;
typedef vector<string> vs;
typedef vector<ii> vii;
typedef vector<vi> vvi;
typedef map<int, int> mii;
typedef map<string, int> msi;
typedef map<int, string> mis;
typedef pair<int, ii> edge;

#define sc(x) scanf("%d", &x)
#define scl(x) scanf("%lld", &x)
#define all(v) v.begin(), v.end()
#define rall(v) v.rbegin(), v.rend()
#define mem(arr, val) memset(arr, val, sizeof arr)
#define sz(v) (int)v.size()
#define rsz(v) v.resize
#define clr(v) v.clear()
#define rev(v) reverse(all(v))
#define lop(i, end) for (int i = 0; i < end; i++)
#define rlop(i, start) for (int i = start - 1; i >= 0; i--)
#define loop(i, start, end) for (int i = start; i < end; i++)
#define rloop(i, start, end) for (int i = start - 1; i >= end; i--)
#define PB push_back
#define pb pop_back
#define mP make_pair
#define f first
#define s second

const ll OO = (ll)(4e18) + 9;
const int MOD = (int)(1e9) + 7;
const int oo = 2147483647;
const double EPS = 1e-8;
const double PI = acos(-1.0);

// enum dir { d, r, u, l , dr, ur, dl, ul };
int dx[] = {1, 0, -1, 0, 1, -1, 1, -1};
int dy[] = {0, 1, 0, -1, 1, 1, -1, -1};

string abc = "abcdefghijklmnopqrstuvwxyz";
string vowels = "aeiouy"; // and sometimes "aeiouy"

template <typename X, typename Y> bool ckmin(X &a, Y b) {
  return a > b ? a = b, true : false;
}
template <typename X, typename Y> bool ckmax(X &a, Y b) {
  return a < b ? a = b, true : false;
}

int dcmp(ld d1, ld d2) {
  return fabs(d1 - d2) <= EPS ? 0 : d1 > d2 ? 1 : -1;
} // Compare Double Numbers
ll gcd(ll x, ll y) { return !y ? x : gcd(y, x % y); }
ll lcm(ll a, ll b) { return a * (b / gcd(a, b)); }
// convert index from 2D array to 1D array. (Zero-indexed)
int conv_2_1(int r, int c, int nCol) { return (nCol * r) + c + 1; }
// convert index from 1D array to 2D array. (Zero-indexed)
ii conv_1_2(int n, int nCol) {
  int r = n / nCol, c = n % nCol;
  return ii(r, c);
}

void inter(string s) {
  cout << s << endl;
  fflush(stdout);
}

const int NN = 2e6 + 10;
ll fact[NN];

void init() {
  fact[0] = 1;
  for (int i = 1; i < NN; ++i)
    fact[i] = (fact[i - 1] * 1LL * i) % MOD;
}

ll nCr(ll n, ll r) {
  auto modInverse = [](ll a) {
    auto power = [](ll base, ll exp) {
      ll ans = 1;
      base %= MOD;
      while (exp > 0) {
        if (exp & 1)
          ans = (ans * base) % MOD;
        exp >>= 1;
        base = (base * base) % MOD;
      }
      return ans;
    };
    return power(a, MOD - 2);
  };
  return (fact[n] * modInverse(fact[r] * 1LL * fact[n - r])) % MOD;
}

ll _sieve_size = 10000010;
bitset<10000010> bs;
vll primes;

void sieve() {
  bs.set();
  bs[0] = bs[1] = 0;
  for (ll i = 2; i < _sieve_size; i++)
    if (bs[i]) {
      for (ll j = i * i; j < _sieve_size; j += i)
        bs[j] = 0;
      primes.push_back(i);
    }
}

ll numDiv(ll N) {
  ll PF_idx = 0, PF = primes[PF_idx], ans = 1;
  while (PF * PF <= N) {
    ll power = 0;
    while (N % PF == 0) {
      N /= PF;
      power++;
    }
    ans *= (power + 1);
    PF = primes[++PF_idx];
  }
  if (N != 1)
    ans *= 2;
  return ans;
}

int main() {
#ifndef ONLINE_JUDGE

#else
  // freopen("pyramid.in", "r", stdin);
#endif
  // freopen("in.txt", "r", stdin);
  // freopen("out.txt", "w", stdout);
  ios_base::sync_with_stdio(false);
  cin.tie(NULL);
  sieve();
  int n;
  cin >> n;
  ll ans = 0;
  for (int i = 1; i <= n; i++)
    ans += i * 1ll * numDiv(i);
  cout << ans << endl;

  return 0;
}