UVa 382

UVa 382

題目

http://domen111.github.io/UVa-Easy-Viewer/?382

給很多個數字 $n$ ,對於每個 $n$ ,求該數字的所有因數,不包含自己本身的總和

如果等於輸出 PERFECT ,若小於輸出 DEFICIENT ,若大於輸出 ABUNDANT

想法

對於每個 $n$ 暴力掃過一遍看看有那些因數,加總起來判斷

至於輸出要對齊的部分,這邊採用 log 的方式得知求出的數字是幾位數,進而判斷出應該要填充多少的空格

Code

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
//By Koios1143
#include<iostream>
#include<cmath>
using namespace std;
int n, cnt=0;
int main(){
cout<<"PERFECTION OUTPUT\n";
while(cin>>n && n){
cnt=0;
for(int i=1 ; i<n ; i++){
if(n%i==0){
cnt+=i;
}
}
for(int i=0, p=5-((int)log10(n)+1) ; i<p ; i++){
cout<<' ';
}
cout<<n<<" ";
if(cnt==n){
cout<<"PERFECT\n";
}
else if(cnt<n){
cout<<"DEFICIENT\n";
}
else{
cout<<"ABUNDANT\n";
}
}
cout<<"END OF OUTPUT\n";
return 0;
}

複雜度分析

每筆測試資料時間複雜度為 $O(n)$