题目描述
古希腊数学家尼科马霍斯(Nicomachus)根据整数的真因数之和与该数的大小关系,将整数分为三类:
- 当这个整数的所有真因数之和大于其本身时,称该数为过剩数(Abundant)
- 当这个整数的所有真因数之和小于其本身时,称该数为不足数(Deficient)
- 当这个整数的所有真因数之和恰好等于其本身时,称该数为完美数(Perfect)
所谓 a 的真因数是 a 的因数且小于 a 的数。给定一个正整数 n,请判断它是过剩数,不足数还是完美数。
输入格式
单个整数:表示给定的数字。
输出格式
根据输入整数的分类,输出 Abundant
、Deficient
或 Perfect
。
数据范围
- 对于 50%50% 的分数,1≤n≤1,000,000
- 对于 100%100% 的分数,1≤n≤2,000,000,000
样例数据
输入:
6
输出:
Perfect
说明:
6=1+2+3
输入:
7
输出:
Deficient
说明:
7是素数只有一个真因子1
输入:
12
输出:
Abundant
说明:
1+2+3+4+6>12
题解
本题关键点:枚举因子。 代码如下。
#include <iostream>
#include <cmath>
using namespace std;
int main(){
long long n,ans = 1;
cin>>n;
for (int i = 2; i <= sqrt(n); i++){
if (n % i == 0){
ans+=i+(n/i);
}
}
if((int)(sqrt(n))*(int)(sqrt(n))==n){
ans-=sqrt(n);
}
if(ans<n){
cout << "Deficient" << endl;
}
else if(ans==n){
cout << "Perfect" << endl;
}
else{
cout << "Abundant" << endl;
}
return 0;
}