Problem Link:点击打开链接
题目描述
求1-n内的完数,所谓的完数是这样的数,它的所有因子相加等于它自身,比如6有3个因子1,2,3,1+2+3=6,那么6是完数。即完数是等于其所有因子相加和的数。
输入描述:
测试数据有多组,输入n,n数据范围不大。
输出描述:
对于每组输入,请输出1-n内所有的完数。如有案例输出有多个数字,用空格隔开,输出最后不要有多余的空格。
输入例子:
6
输出例子:
6
AC code:
#include<iostream>
#include<algorithm>
#include<stdio.h>
#include<map>
#include<math.h>
#include<string.h>
#include<queue>
#include<vector>
#include<set>
#define LL long long
#define exp 1e-9
#define MAXN 1000010
#define N 3333
using namespace std;
void Perfect_num(int n)
{
int i,j,k,s;
if(n<6)
printf("\n");
else
{
printf("6");
for(i=7;i<=n;i++)
{
s=1;
k=(int)sqrt(i);
for(j=2;j<=k;++j)
{
if(i%j==0)
{
s+=j;
s+=(i/j);
}
if(j==k&&k*k==i) s-=k;
if(s>i) break;
}
if(s==i)
printf(" %d",i);
}
printf("\n");
}
}
int main( )
{
// freopen("D:\\in.txt","r",stdin);
int n,i,j,c,s;
while(scanf("%d",&n)!=EOF)
{
Perfect_num(n);
}
return 0;
}