以前の約数を求める考え方では時間が足りない。
よって、半分で済むように i*i=nまでfor文をまわす。
この時、 i*i=nの時は sum+=i
そうでなければ sum+= i + (n/i)として改善した。
問題文に「その数自身を除く約数の和を S
とする.」とあることを忘れずに。
/********************************
* 2012/07/04 *
* AOJ Volume21 2101 *
* Perfect Number *
* crane *
*********************************/
#include<iostream>
#include<cmath>
using namespace std;
int main(){
int n;
while(cin >> n,n){
int sum=0;
for(int i=1; i*i<=n; i++)
if(n % i == 0){
if(i*i == n) sum+=i;
else sum += i+(n/i);
}
sum -= n;
if(sum==n) cout << "perfect number" << endl;
else if(sum<n) cout << "deficient number" << endl;
else cout << "abundant number" << endl;
}
return 0;
}
0 件のコメント:
コメントを投稿