完数:是指一个数恰好是它的所有不同因子之和(不包括它本身)。例如,6=1+2+3;所以6为完数。
输入描述:输入数据含有一些整数n(0<n<10000)。
输出描述:对于每个整数n,输出所有不大于n的完数。每个整数n的输出有n引导,跟上冒号,然后是由空格开道的一个个完数,每个n的完数列表应占独立一行。
样本输入:
100
5000
样本输出:
100:6 28
5000:6 28 496
核心思想:用向量构造一个10000之内的完数表,每次输入n,输出小于等于n的完数。
#include<iostream>
#include<vector>
using namespace std;
int main(){
vector<int> vec;
int n;
for(int i=2;i<10000;i=i+2){//判断i是不是完数
int sum=1;
for(int j=2;j<=i/2;j++){
if(i%j==0)
sum+=j;
}
if(sum==i)
vec.push_back(i);
}
while(cin>>n){
cout<<n<<": ";
for(int i=0;i<vec.size();i++){
if(vec[i]<=n)
cout<<vec[i]<<" ";
}
cout<<endl;
}
}