21xrx.com
2024-11-22 06:53:42 Friday
登录
文章检索 我的文章 写文章
用C++编写程序找出n以内的所有完数
2023-07-02 03:33:20 深夜i     --     --
C++ 程序 完数 n 找出

完数,也叫完美数,是指一个数恰好等于它的因子之和(除去它本身),例如6就是一种完数,因为6=1+2+3。那么如何用C++编写程序来找出n以内的所有完数呢?下面让我们来一步步了解。

首先,我们需要了解一个数的因子是什么。假设有一个整数n,那么它的因子就是能够整除n的所有正整数。换句话说,一个数x是n的因子,当且仅当n除以x的余数为0。因此,我们可以使用一个for循环来从1到n-1遍历所有可能的因子,然后将能够整除n的因子的和累加起来,最后判断这个和是否等于n本身,如果相等,则n就是一个完数。

具体的实现代码如下:


#include <iostream>

using namespace std;

int main() {

  int n, sum;

  cout << "Please input a positive integer n: ";

  cin >> n;

  cout << "Perfect numbers smaller than or equal to " << n << ":\n";

  for (int i = 1; i <= n; i++) {

    sum = 0;

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

      if (i % j == 0) sum += j;

    }

    if (sum == i) cout << i << " ";

  }

  cout << endl;

  return 0;

}

在这段代码中,我们使用了两个for循环,一个用来遍历n以内所有的数,另一个用来遍历当前数的所有因子。sum变量用来记录当前数的因子之和,当循环结束后,如果这个和等于当前数,就输出它,并继续遍历下一个数。运行程序后,它会要求用户输入一个正整数n,然后输出n以内的所有完数。

需要注意的是,因为完数比较少,所以这个程序的运行速度非常快,但如果n太大,它可能无法完成运算或输出所有结果,因为它需要遍历n以内的所有数,并对每个数求因子之和,这样的计算量非常大。如果你想让程序运行得更快,可以只遍历一部分数,例如n的平方根附近的数,并将计算结果存储在一个数组中,这样可以在以后的查询中直接查找结果,而不需要再次计算。

  
  

评论区

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