Problem p03050 (C++)

Buggy submission (status: Runtime Error):
#include <algorithm>
#include <bitset>
#include <climits>
#include <cmath>
#include <cstdio>
#include <cstdlib>
#include <cstring>
#include <ctime>
#include <deque>
#include <fstream>
#include <functional>
#include <iomanip>
#include <iostream>
#include <list>
#include <map>
#include <queue>
#include <random>
#include <set>
#include <sstream>
#include <stack>
#include <string>
#include <tuple>
#include <unordered_map>
#include <utility>
#include <vector>

using namespace std;

// int X[100000], Y[100000];
//
// void solve() {
//     int P, Q, x, y;
//     char d;
//     cin>>P>>Q;
//     memset(X, 0, sizeof(X));
//     memset(Y, 0, sizeof(Y));
//     for (int i=0; i<P; i++) {
//         cin>>x>>y>>d;
//         if (d == 'N') for (int j= y+1; j<=Q; j++) Y[j]++;
//         if (d == 'S') for (int j= 0; j<y; j++) Y[j]++;
//         if (d == 'E') for (int j= x+1; x<=Q; j++) X[j]++;
//         if (d == 'W') for (int j= 0; j<x; j++) X[j]++;
//     }
//     int ans = 0;
//     for (int i=0; i<=Q; i++) {
//         if (X[i])
//     }
//
// }

int main() {
  ios::sync_with_stdio(0);
  cin.tie(0);

  long long n, ans = 0;
  cin >> n;
  for (long long m = 1; m <= sqrt(n); m++) {
    if (n % (m + 1) && n / (m + 1) == n / m)
      ans += m;
    if (n % m)
      continue;
    long long mm = n / m - 1;
    // if (mm * mm < n) break;
    if (n / (mm + 1) == n / mm)
      ans += mm;
  }
  cout << ans << endl;

  //    int T;
  //    cin>>T;
  //    for (int t=1; t<=T; t++) {
  //        cout<<"Case #"<<t<<": ";
  //        solve();
  //    }
  return 0;
}

Fixed submission:
#include <algorithm>
#include <bitset>
#include <climits>
#include <cmath>
#include <cstdio>
#include <cstdlib>
#include <cstring>
#include <ctime>
#include <deque>
#include <fstream>
#include <functional>
#include <iomanip>
#include <iostream>
#include <list>
#include <map>
#include <queue>
#include <random>
#include <set>
#include <sstream>
#include <stack>
#include <string>
#include <tuple>
#include <unordered_map>
#include <utility>
#include <vector>

using namespace std;

// int X[100000], Y[100000];
//
// void solve() {
//     int P, Q, x, y;
//     char d;
//     cin>>P>>Q;
//     memset(X, 0, sizeof(X));
//     memset(Y, 0, sizeof(Y));
//     for (int i=0; i<P; i++) {
//         cin>>x>>y>>d;
//         if (d == 'N') for (int j= y+1; j<=Q; j++) Y[j]++;
//         if (d == 'S') for (int j= 0; j<y; j++) Y[j]++;
//         if (d == 'E') for (int j= x+1; x<=Q; j++) X[j]++;
//         if (d == 'W') for (int j= 0; j<x; j++) X[j]++;
//     }
//     int ans = 0;
//     for (int i=0; i<=Q; i++) {
//         if (X[i])
//     }
//
// }

int main() {
  ios::sync_with_stdio(0);
  cin.tie(0);

  long long n, ans = 0;
  cin >> n;
  for (long long m = 1; m <= sqrt(n); m++) {
    if (n % (m + 1) && n / (m + 1) == n / m)
      ans += m;
    if (n % m)
      continue;
    long long mm = n / m - 1;
    // if (mm * mm < n) break;
    if (mm && n / (mm + 1) == n / mm)
      ans += mm;
  }
  cout << ans << endl;

  //    int T;
  //    cin>>T;
  //    for (int t=1; t<=T; t++) {
  //        cout<<"Case #"<<t<<": ";
  //        solve();
  //    }
  return 0;
}