# Number Theory# Iteration# Basic Math

c032 - 00382 - Perfection

🔗 前往 ZeroJudge 原題

題目描述

題目要求判斷給定的正整數是完美數、盈數還是虧數。完美數等於其所有真因數的和(不包括自身)。盈數的真因數和大于自身,虧數的真因數和小于自身。輸入為一系列正整數,直到輸入 0 為止。

解題思路

對於每個輸入的數字 a,程式碼計算其所有真因數的和 sum。然後,將 suma 進行比較,以確定 a 是完美數、盈數還是虧數。最後,按照題目要求的格式輸出結果。程式碼使用迴圈迭代從 1 到 a/2 的所有數字,檢查是否為 a 的因數。為了符合輸出格式,程式碼使用空格進行對齊。

複雜度分析

  • 時間複雜度: O(n * sqrt(n)),其中 n 是輸入數字。因為對於每個數字,迴圈迭代到 n/2,而判斷是否為因數的操作是 O(1)。
  • 空間複雜度: O(1),程式碼只使用了幾個整數變數來儲存中間結果,空間使用是常數級別。

程式碼

#include <iostream>

using namespace std;

int main(){
	long long int a=0,sum=0,number1=0,number2=0;
	
	cout << "PERFECTION OUTPUT" << endl;
	while(cin >> a){
		if(a>0){
			for(int i=1;i<=a/2;i++){
				if(a%i==0){
					sum+=i;
				}
			}
			number1=a;
			while(number1>0){
				number2++;
				number1/=10;
			}
			while(number2-5<0){
				cout << " ";
				number2++;
			}
			number2=0;
			if(sum>a){
				cout << a <<"  ABUNDANT" << endl;
			}
			else if(sum==a){
				cout << a << "  PERFECT" << endl;
			}
			else if(sum<a){
				cout << a <<"  DEFICIENT"<< endl;
			}
		sum=0;	
		}
		else{
			cout << "END OF OUTPUT" << endl; 
		}
	}
	
	
}

Discussion