AT934 【完全數】【題解】
阿新 • • 發佈:2018-12-15
題目背景
給定一個數,將其約數(不含自己)相加,如果等於本身,輸出“ ”,小於本身,輸出“ ”,大於本身,輸出“ ”。
題目描述
高橋君は完全なものが大好きです。
自然數には、完全數というものがあります。 完全數というのは、自分以外の約數の総和が自分と等しくなる自然數のことです。 例えば 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;
}