# Number Theory# Divisor Sum# Brute Force

c203 - 13185 - DPA Numbers I

🔗 前往 ZeroJudge 原題

題目描述

題目要求判斷給定的正整數是完美數、虧數還是盈數。完美數等於其所有真因數的和(不包括自身)。虧數的真因數和小于自身,盈數的真因數和大于自身。

解題思路

對於每個輸入的數字 n,程式碼計算其所有小于 n/2 的因數,並計算這些因數的和。然後,程式碼將因數和與 n 進行比較,以確定 n 是完美數、虧數還是盈數。

複雜度分析

  • 時間複雜度: O(n)
  • 空間複雜度: O(1)

程式碼

#include <iostream>
#include <math.h>

using namespace std;

int main(){
	long long int n=0,sum=0,i=0;
	int a=0;
	cin >> a;
	while(cin >> n){
		for(i=1;i<=n/2;i++){
			if(n%i==0){
				sum+=i;
			}
		}
		if(sum==n){
			cout << "perfect" << endl;
		}
		else if(sum>n){
			cout << "abundant" << endl; 
		}
		else{
			cout << "deficient" << endl;
		}
		n=0;sum=0;i=0;
	}
	
	
}

Discussion