向量中友好对的数量

Number of friendly pairs in vector

我正在尝试编写一个函数,它接受一个整数向量作为参数,returns 可以在该向量中找到的友好对数。该函数不得使用任何其他辅助函数。

如果一个数的所有除数之和(不包括它本身)等于另一个数,则一对数是友好数,反之亦然。

#include <iostream>
#include <vector>
int Number_Of_Friendly_Pairs(std::vector<int>a) {
  std::vector<int>b;
  for (int i = 0; i < a.size(); i++) {
    int sum_of_divisors = 0;
    for (int j = 1; j < a[i]; j++)
      if (a[i] % j == 0)
        sum_of_divisors += j;
    b.push_back(sum_of_divisors);
  }
  int number = 0;
  for (int i = 0; i < a.size(); i++)
    for (int j = i + 1; j < b.size(); j++)
      if (a[i] == b[j])
        number++;
  return number;
}

int main()
{
  std::vector<int>b{220, 1184, 284, 1210, 2620, 2924};
  std::cout << Number_Of_Friendly_Pairs(b);
  return 0;
}

我的代码完全准确吗?对于向量 {220, 1184, 284, 1210, 2620, 2924} 它给出了正确的输出(即 3)。但是,我不确定它是否会为每种情况提供正确的输出。

A pair of numbers is friendly if the sum of all divisors of one number (not counting itself) is equal to another number and vice versa.

但是,代码只测试一些除数之和等于某个数字。反之亦然的部分非常缺失。例如,代码在 {7, 8}.

中声明一对友好

您需要测试 (a[i] == b[j]) && (b[i] == a[j])