Дружественные числа на диапазоне. Ошибка сегментации

Дружественные числа -– это два натуральных числа, таких, что сумма всех делителей одного числа (меньших самого этого числа) равна другому числу, и наоборот. Напишите программу, которая находит все пары дружественных чисел в заданном диапазоне. Используйте функцию, которая вычисляет сумму делителей числа.

Входные данные

Входная строка содержит два натуральных числа – границы диапазона a и b . Гарантируется, что a ≤ b .

Выходные данные

Программа должна вывести в одной строке через пробел все пары дружественных чисел в заданном диапазоне. Каждая пара должна быть взята в круглые скобки, пары разделены пробелами. Лишних пробелов в начале и в конце строки быть не должно.

Если в заданном диапазоне нет дружественных чисел, программа должна вывести 0.

#include <iostream>
#include <vector>
#include <cmath>

using namespace std;

void friends_checker(int x, int y) {
    vector <long long> sumRem;
    for (int i = x; i <= y; i++) {
        int sum = 0;
        for (int j = 1; j * j < i; j++) { //Dividers
            if (i % j == 0) sum += j + i / j;
        }
        if (((round(sqrt(i)))) *  (round(sqrt(i))) == i) sum += int(sqrt(i));
        if (i == 1) sum = 1;
        if (i != 1) sum -= i;
        sumRem.push_back(sum);
    }
    //for (auto it = sumRem.begin(); it != sumRem.end(); it++) cout << *it << " ";
    bool flag = false;
    for (int i = 0; i < y - 1; i++) {
        for (int j = i + 1; j < y; j++) {
            if (sumRem[i] == x + j && sumRem[j] == x + i) {
                cout << "(" << x + i << "," << x + j << ")\n";
                flag = true;
            }
        }
    }
if (!flag) cout << 0;
}


int main() {
    int a, b;
    cin >> a >> b;
    friends_checker(a, b);
    return 0;
}

Падает на тестах (66000, 67000), (87000, 87633) и т.п.


Ответы (0 шт):