题目描述
请写一个程序,给出指定整数范围【a ,b】内所有的完数,一个数如果恰好等于除它本身外的所有因子之和,这个数就称为完数,例如6是完数,因为6=1+2+3。
输入描述:
每一组数据为两个正整数,分别表示a和b(1<a<b<10^5)。
输出描述:
指定范围内的所有完数,每个数占一行。
示例1
输入
复制
1 100
输出
复制
6 28
#include <cstdio>
#include <vector>
using namespace std;
bool wan(int num) {
if (num <= 2) {
return false;
} else {
int sum = 1, i = 2;
for (; i * i < num; ++i) {
if (num % i == 0) {
sum += i + (num / i);
}
}
if (i * i == num) {
sum += i;
}
return sum == num;
}
}
int main() {
vector<int> vec;
for (int j = 1; j < 100001; ++j) {
if (wan(j)) {
vec.push_back(j);
}
}
int a, b;
while (EOF != scanf("%d%d", &a, &b)) {
for (int i : vec) {
if (a <= i && b >= i) {
printf("%d\n", i);
}
}
}
return 0;
}