题目
一个数如果恰好等于它的各个因子(该数本身除外)之和,如 6=3+2+1,那么称该数为“完数”;若因子之和大于该数,则称其为“盈数”,求出2到60之间的所有完数和盈数。
输入
题目没有任何输入。
输出
输出2到60之间的所有“完数”和“盈数”,并以如下形式输出:
E:e1 e2 e3 …(ei为完数)
G:g1 g2 g3…(gi为盈数)
代码
//完数和盈数
#include <iostream>
#include <cstdio>
#include <vector>
using namespace std;
vector<int> numberE;
vector<int> numberG;
//判断因子的函数(除了该数本身)
int judgeNumber(int n){
int sum = 0;
for(int i = 1; i < n; i++){
if(n%i == 0){
sum += i;
}
}
return sum;
}
int main(){
//在2~60的范围内按条件判断是完数还是盈数,分别存储
for(int i = 2; i <= 60; i++){
if(judgeNumber(i) == i){
numberE.push_back(i);
}else if(judgeNumber(i) > i){
numberG.push_back(i);
}
}
//两种方法输出
//(方法一)
// vector<int>::iterator it;
// //输出完数
// printf("E:");
// for(it = numberE.begin(); it != numberE.end(); it++){
// printf(" %d", *it);
// }
// //输出盈数
// printf("\nG:");
// for(it = numberG.begin(); it != numberG.end(); it++){
// printf(" %d", *it);
// }
//(方法二)
printf("E:");
for(int i = 0; i<numberE.size(); i++){
printf(" %d", numberE[i]);
}
printf("\nG:");
for(int j = 0; j<numberG.size(); j++){
printf(" %d", numberG[j]);
}
printf("\n");
return 0;
}