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

#include <bits/stdc++.h>

#define PI acos(-1)
#define all(a) a.begin(), a.end()
#define F first
#define S second
#define PB push_back
#define PPB pop_back
#define PF push_front
#define PPF pop_front
#define MP make_pair
#define MT make_tuple
#define f0(i, n) for (i = 0; i < (n); ++i)
#define f1(i, n) for (i = 1; i <= (n); ++i)
#define fab(i, a, b) for (i = (a); i <= (b); ++i)
#define fr(i, b, a) for (i = (b); i >= (a); --i)
#define endl "\\n"
#define ln length

using namespace std;

/*
#include <ext/pb_ds/assoc_container.hpp>
using namespace __gnu_pbds;
typedef tree<int,null_type,less<int>,rb_tree_tag,
        tree_order_statistics_node_update> indexed_set;
//*/
typedef long long int ll;
#define int long int

typedef vector<ll> vll;
typedef pair<ll, ll> pll;
// typedef tuple<ll, ll, ll> tll

//* utility function
inline bool compare(ll i, ll j) { return i > j; }
//*/

//* function prototypes
template <typename T> T modpow(T number, T power, T mod_value);
void seive(ll maximum_number);
//*/

// int row, column;
// int dx[8] = { 0,   1,  1,  1,  0,  -1, -1, -1};
// int dy[8] = {-1,  -1,  0,  1,  1,   1,  0, -1};
//               N   NE   E  SE   S   SW   W   NW
// int dx[4] = { 0,       1,      0,      -1    };
// int dy[4] = {-1,       0,      1,       0    };

const ll maxN = 2e5 + 10;
const ll INF = 1e18;
const ll maxA = 1e7 + 10;
const ll maxB = 320;

bitset<maxN + 10> is_prime;
vll prime;

#ifdef DEBUG
#endif // DEBUG
// ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
// ###################################################################################################################
// ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
map<ll, string> res = {{0, "No"}, {1, "Yes"}};
// ll arr[maxN+10];
ll cnt[maxN];
ll spd[maxA];

void create_spd() {
  ll i, j;
  for (auto a : prime) {
    if (a * a > maxA)
      break;
    for (i = a * a; i <= maxA; i += a) {
      if (spd[i] == 0)
        spd[i] = a;
    }
  }
  for (i = 1; i <= maxA; i++) {
    if (spd[i] == 0)
      spd[i] = i;
  }
}

ll nod(ll n) {
  ll tot_prime = 0;
  while (n > 1) {
    ll a = spd[n];
    cnt[tot_prime] = 0;
    while (n % a == 0) {
      cnt[tot_prime]++;
      n /= a;
    }
    tot_prime++;
  }
  ll ans = 1;
  ll i;
  f0(i, tot_prime) { ans *= cnt[i] + 1; }
  return ans;
}

signed main() {
  ios::sync_with_stdio(0);
  cin.tie(0);
  cout.tie(0);
  // freopen("input.txt", "r", stdin);
  // freopen("output.txt", "w", stdout);

  seive(10000LL);
  create_spd();
  ll number_of_test_case = 1, test_case;
  // cin >> number_of_test_case;
  for (test_case = 1; test_case <= number_of_test_case; test_case++) {
    // cout << "Test #" << test_case << ": ";
    // cout << "Case " << test_case << ": ";
    ll i, j, k, m, n, query_type, q;
    ll a, b, x, y;

    cin >> n;

    ll ans = 0;
    f1(k, n) { ans += k * nod(k); }
    cout << ans << endl;
  }
  return 0;
}

// ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
// ###################################################################################################################
// ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

template <typename T> T modpow(T number, T power, T mod_value) {
  if (power == 0)
    return 1 % mod_value;
  ll u = modpow(number, power / 2, mod_value);
  u = (u * u) % mod_value;
  if (power % 2 == 1)
    u = (u * number) % mod_value;
  return u;
}
void seive(ll maximum_number) {
  ll i, j;
  is_prime.set();
  is_prime.reset(0);
  is_prime.reset(1);
  for (i = 2; i * i <= maximum_number; i++) {
    if (is_prime.test(i) == true) {
      prime.PB(i);
      for (j = i * i; j <= maximum_number; j += i)
        is_prime.reset(j);
    }
  }
  for (; i <= maximum_number; i++)
    if (is_prime.test(i) == true)
      prime.PB(i);
}


Error: TLE

Fixed submission:

#include <bits/stdc++.h>

#define PI acos(-1)
#define all(a) a.begin(), a.end()
#define F first
#define S second
#define PB push_back
#define PPB pop_back
#define PF push_front
#define PPF pop_front
#define MP make_pair
#define MT make_tuple
#define f0(i, n) for (i = 0; i < (n); ++i)
#define f1(i, n) for (i = 1; i <= (n); ++i)
#define fab(i, a, b) for (i = (a); i <= (b); ++i)
#define fr(i, b, a) for (i = (b); i >= (a); --i)
#define endl "\\n"
#define ln length

using namespace std;

/*
#include <ext/pb_ds/assoc_container.hpp>
using namespace __gnu_pbds;
typedef tree<int,null_type,less<int>,rb_tree_tag,
        tree_order_statistics_node_update> indexed_set;
//*/
typedef long long int ll;
#define int long int

typedef vector<ll> vll;
typedef pair<ll, ll> pll;
// typedef tuple<ll, ll, ll> tll

//* utility function
inline bool compare(ll i, ll j) { return i > j; }
//*/

//* function prototypes
template <typename T> T modpow(T number, T power, T mod_value);
void seive(ll maximum_number);
//*/

// int row, column;
// int dx[8] = { 0,   1,  1,  1,  0,  -1, -1, -1};
// int dy[8] = {-1,  -1,  0,  1,  1,   1,  0, -1};
//               N   NE   E  SE   S   SW   W   NW
// int dx[4] = { 0,       1,      0,      -1    };
// int dy[4] = {-1,       0,      1,       0    };

const ll maxN = 2e5 + 10;
const ll INF = 1e18;
const ll maxA = 1e6 + 10;
const ll maxB = 320;

bitset<maxN + 10> is_prime;
vll prime;

#ifdef DEBUG
#endif // DEBUG
// ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
// ###################################################################################################################
// ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
map<ll, string> res = {{0, "No"}, {1, "Yes"}};
// ll arr[maxN+10];
ll cnt[maxN];

ll nod(ll n) {
  ll tot_prime = 0;
  for (ll a : prime) {
    if (a * a > n)
      break;
    if (n % a == 0) {
      cnt[tot_prime] = 0;
      while (n % a == 0) {
        cnt[tot_prime]++;
        n /= a;
      }
      tot_prime++;
    }
  }
  if (n > 1) {
    cnt[tot_prime] = 1;
    tot_prime++;
  }
  ll ans = 1;
  ll i;
  f0(i, tot_prime) { ans *= cnt[i] + 1; }
  return ans;
}

signed main() {
  ios::sync_with_stdio(0);
  cin.tie(0);
  cout.tie(0);
  // freopen("input.txt", "r", stdin);
  // freopen("output.txt", "w", stdout);

  seive(10000LL);
  ll number_of_test_case = 1, test_case;
  // cin >> number_of_test_case;
  for (test_case = 1; test_case <= number_of_test_case; test_case++) {
    // cout << "Test #" << test_case << ": ";
    // cout << "Case " << test_case << ": ";
    ll i, j, k, m, n, query_type, q;
    ll a, b, x, y;

    cin >> n;

    ll ans = 0;
    f1(k, n) { ans += k * nod(k); }
    cout << ans << endl;
  }
  return 0;
}

// ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
// ###################################################################################################################
// ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

template <typename T> T modpow(T number, T power, T mod_value) {
  if (power == 0)
    return 1 % mod_value;
  ll u = modpow(number, power / 2, mod_value);
  u = (u * u) % mod_value;
  if (power % 2 == 1)
    u = (u * number) % mod_value;
  return u;
}
void seive(ll maximum_number) {
  ll i, j;
  is_prime.set();
  is_prime.reset(0);
  is_prime.reset(1);
  for (i = 2; i * i <= maximum_number; i++) {
    if (is_prime.test(i) == true) {
      prime.PB(i);
      for (j = i * i; j <= maximum_number; j += i)
        is_prime.reset(j);
    }
  }
  for (; i <= maximum_number; i++)
    if (is_prime.test(i) == true)
      prime.PB(i);
}