题目背景
给定一个数,将其约数(不含自己)相加,如果等于本身,输出“ ”,小于本身,输出“ ”,大于本身,输出“ ”。
题目描述
高橋君は完全なものが大好きです。
自然数には、完全数というものがあります。 完全数というのは、自分以外の約数の総和が自分と等しくなる自然数のことです。 例えば 6 6 の場合 1\ +\ 2\ +\ 3\ =\ 6 1 + 2 + 3 = 6 となるので完全数です。 それに対して、自分以外の約数の総和が自分より小さくなる場合は不足数と言い、大きくなる場合は過剰数と言います。
高橋君には今気になっている自然数があります。高橋君のために、それが完全数なのか不足数なのか過剰数なのか判定してください。
You are given a word s s . Can you predict what will it become after correction?
In this problem letters a, e, i, o, u and y are considered to be vowels.
输入输出格式
输入格式:
入力は以下の形式で標準入力から与えられる。
N
- 1 行目に高橋君が気になっている自然数 が与えられる。
输出格式:
が完全数ならばPerfect
、 不足数ならばDeficient
、 過剰数ならばAbundant
、を
行で出力せよ。
输入输出样例
输入样例#1:
6
输出样例#1:
Perfect
输入样例#2:
24
输出样例#2:
Abundant
输入样例#3:
27
输出样例#3:
Deficient
输入样例#4:
945
输出样例#4:
Abundant
思路很简单,大致就是循环枚举因数然后加起来
只要能整除就是因数,因此一次循环可以加上两个因数,所以只要循环
次(否则会
)
注意:一定要换行!
代码:
#include<iostream>//不解释
#include<cmath>
using namespace std;
long long n,ans;
int main(){
cin>>n;//输入
for(int i=1;i<=sqrt(n);i++)//循环找其因数,到sprt(n)是减少循环次数,优化
if(n%i==0)
{
ans=ans+i;//累加因数
ans=ans+n/i;//累加相对的因数
}
if(sqrt(double(n))==sqrt(n))//判断是否为完全平方数
ans-=sqrt(n);//如果是,就减去
//因为1也是完全平方数,不用另行判断
if(ans-n==n) cout<<"Perfect"<<endl;
else if(ans-n<n) cout<<"Deficient"<<endl;
else cout<<"Abundant"<<endl;
return 0;
}