21xrx.com
2025-03-28 15:34:35 Friday
文章检索 我的文章 写文章
用C++编写程序找出n以内的所有完数
2023-07-02 03:33:20 深夜i     20     0
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的平方根附近的数,并将计算结果存储在一个数组中,这样可以在以后的查询中直接查找结果,而不需要再次计算。

  
  

评论区