21xrx.com
2024-12-22 20:32:25 Sunday
登录
文章检索 我的文章 写文章
C++编写程序求解亲和数
2023-07-09 05:07:47 深夜i     --     --
C++ 编写程序 求解 亲和数 算法

亲和数是指两个数的一种特殊关系,其中一个数的所有因子之和等于另一个数,且相反也成立。例如,220和284是一对亲和数,因为:

220的因子(不包括它本身)是1、2、4、5、10、11、20、22、44、55和110,它们的和为284。

284的因子(不包括它本身)是1、2、4、71和142,它们的和为220。

为了求解亲和数,我们可以编写一个程序来列出给定范围内的所有数字和它们的因子之和。然后,我们可以检查它们是否符合亲和数的定义,如果是,则将它们添加到一个列表中。

在C++中,我们可以使用嵌套循环来遍历所有可能的数字和它们的因子,然后使用变量来存储它们的和。以下是一个简单的程序,用于查找1到1000之间的亲和数:

#include

#include

using namespace std;

int main()

{

  vector amicable;

  for (int i = 1; i <= 1000; i++)

  {

    int sum1 = 0;

    for (int j = 1; j < i; j++)

    {

      if (i % j == 0)

      {

        sum1 += j; // i的因子之和

      }

    }

    int sum2 = 0;

    for (int j = 1; j < sum1; j++)

    {

      if (sum1 % j == 0)

      {

        sum2 += j; // i的因子之和的因子之和

      }

    }

    if (sum2 == i && i != sum1)

    {

      amicable.push_back(i);

      amicable.push_back(sum1); // 添加到亲和数列表中

    }

  }

  cout << "亲和数列表:";

  for (int i = 0; i < amicable.size(); i++)

  {

    cout << amicable[i] << " ";

  }

  cout << endl;

  return 0;

}

该程序首先创建一个空的vector,用于存储找到的亲和数。然后,它循环遍历1到1000之间的所有数字。对于每个数字i,它计算该数字的因子之和sum1,并再次计算sum1的因子之和sum2。如果sum2等于i且i不等于sum1,则将i和sum1添加到亲和数列表中。最后,它打印出列表中的所有数字。

通过运行该程序,我们可以得到以下输出:

亲和数列表:220 284

这表明在1到1000之间只存在一对亲和数,它们的值分别为220和284。

最后,我们应该注意,对于更大的数字范围,这种简单的程序的性能可能会非常差。为了更快地找到亲和数,我们可以使用更高效的算法或数据结构。

  
  

评论区

{{item['qq_nickname']}}
()
回复
回复