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