poj 1528 Perfection

这是一道简单的数论题,就是找出每个数的因子,并求和在与原数比较。

再求每个因子是,为了节省时间,另外用了一个大数组表示该因子是否找过了。

代码如下:

#include<iostream>

#include<iomanip>

using namespace std;

int an[60001];

int com(int a)

{

    int i,sum;

    sum=1;

    memset(an,0,sizeof(an));

    for(i=2;i<=(a+1)/2;i++)

    {

    if(a%i==0)

    {

    if(an[i]==0)

    {

    sum+=i;

    an[i]=1;

    }

    if(an[a/i]==0)

    {

    sum+=a/i;

    an[a/i]=1;

    } 

    }

    }

    if(sum<a)

    return -1;

    else if(sum==a)

    return 0;

    else return 1;

}

int main()

{

    cout<<"PERFECTION OUTPUT"<<endl;

    int n;

    while(cin>>n&&n)

    {

    cout<<setw(5)<<n<<" ";

    if (n==1) 

    { 

    cout<<"DEFICIENT"<<endl; 

    continue; 

    } 

    if(com(n)==0)

    cout<<"PERFECT"<<endl;

    else if(com(n)==-1)

    cout<<"DEFICIENT"<<endl;

    else cout<<"ABUNDANT"<<endl;

    }

    cout<<"END OF OUTPUT"<<endl;

    return 0;

}
View Code

 

你可能感兴趣的:(poj)