这是一道简单的数论题,就是找出每个数的因子,并求和在与原数比较。
再求每个因子是,为了节省时间,另外用了一个大数组表示该因子是否找过了。
代码如下:
#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; }