# Prime Factorization# Square Root Optimization# Iteration

e929 - pC. 分解質因數

🔗 前往 ZeroJudge 原題

題目描述

題目要求將輸入的正整數 N 分解成質因數,並以指定格式輸出。質因數需由小到大排列,相同質因數則以次方形式表示。

解題思路

此題的核心是質因數分解。程式從 2 開始迭代到輸入數字的平方根。對於每個數字 i,判斷 i 是否為 n 的因數。如果是,則計算 i 能夠被 n 整除的次數,並將結果以 i^次數 的形式輸出。迭代完畢後,如果 n 仍然大於 1,則表示 n 本身是一個質因數,將其輸出。使用平方根優化可以減少迭代次數,提高效率。

複雜度分析

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

程式碼

#include <iostream>
#include <cmath>
using namespace std;
int main(){
	int n;
	cin >> n;
	cout << n << " = ";
	bool start=0;
	int s=sqrt(n);
	for(int i=2;i<=s;++i){
		int tt=0;
		while(n%i==0){
			++tt;
			n/=i;
		}
		if(tt>1){
			if(start)cout << "* ";
			cout << i << "^" << tt << " ";
			start=1;
		}
		else if(tt){
			if(start)cout << "* ";
			cout << i << " ";
			start=1;
		}
	}
	if(n!=1){
		if(start)cout << "* ";
		cout << n;
	}
}

Discussion