# Math# Brute Force# Number Theory

a040 - 阿姆斯壯數

🔗 前往 ZeroJudge 原題

題目描述

題目要求在給定的範圍 [n, m] 內找出所有阿姆斯壯數。阿姆斯壯數是指一個 n 位數的整數,其各位數字的 n 次方和等於該數本身。

解題思路

程式碼使用窮舉法,從 n 開始迭代到 m。對於每個數字 a,計算其位數 y,然後計算各位數字的 y 次方和 sum。如果 a 等於 sum,則輸出 a。如果範圍內沒有找到阿姆斯壯數,則輸出 "none"。

複雜度分析

  • 時間複雜度: O(m * log10(m))。對於每個數字 a (從 n 到 m),計算位數和各位數字的次方和需要 O(log10(a)) 的時間,因此總時間複雜度為 O((m - n) * log10(m)),近似為 O(m * log10(m))。
  • 空間複雜度: O(1)。程式碼只使用了常數級別的額外空間。

程式碼

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

using namespace std;

int main (){
	long long int a,b=0;
	long long int x,y=0;	
	long long int sum=0;
	bool n=false;

	while(cin >> a >> b){

		while(a<=b){
		x=a;
		while(x>0){
			x/=10;
			y++;
		}
		x=a;
		while(x>0){
			sum+=pow(x%10,y);
			x/=10;
		}
		if(a==sum){
		cout << sum << " " ;
		n=true;
		}
		
		sum=0;
		y=0;
		a++;
		
		}
		if(n==false){
			cout << "none" << endl; 
		}
		else if(n==true){
			cout << endl; 
		}
		n=false;
		
	}
	
	
}

Discussion