采用试除法求约数,注意对(1)的特判。
int n;
bool check(int n)
{
int res=1;
for(int i=2;i*i<=n;i++)
if(n % i == 0)
{
res+=i;
if(i != n/i) res+=n/i;
}
return res==n;
}
int main()
{
while(cin>>n)
{
vector<int> e;
for(int i=2;i<=n;i++)
{
if(check(i)) e.pb(i);
}
for(int i=0;i<e.size();i++)
if(i) cout<<' '<<e[i];
else cout<<e[i];
cout<<endl;
}
//system("pause");
return 0;
}