#55454: c++ 解析


yp11452077@yphs.tp.edu.tw (706-08胡瑀霏)


#include<bits/stdc++.h>
using namespace std;
int main(){
	int n,t;//t為某個質因數的次方數
	while(cin>>n){
		for(int i=2;i<=sqrt(n);i+=(i==2?1:2)){
		/*從最小的質因數"2"開始找;
		只需檢查到根號n(因為如果n有大於根號n的因數,必會對應另一個小於根號n的因數);
		i如果是2,則i=i+1;如果不是2,則i=i+2->目的是先過濾所有偶數。*/
			if(n%i==0){//如果n除以i整除,就輸入i
				cout<<i;//把這個質因數i印出來
				t=0;//把t重設為0,準備計算這個i出現了幾次
				while(n%i==0){//只要n還能被i整除,就進入這個迴圈
					t++;//次數+1
					n/=i;//即n=n/i。把n裡所有屬於i的成分「吸乾」
				}
				if(n!=1 && t>1) cout<<"^"<<t<<" * ";//如果n還沒被除到變成1,且目前的次數t大於1
				else if(n!=1 && t==1) cout<<" * ";//如果後面還有其他質因數,但目前的次數t只有1次
				else if(n==1 && t>1) cout<<"^"<<t<<endl;//如果n已經被除到變成1了,且次數t大於1
				else if(n==1 && t==1) cout<<endl;//1沒有質因數,因此不用輸出
			}
		}
		if(n>1) cout<<n<<endl;//當for迴圈結束後,n>1,就把這個質數n輸出
	}
	return 0;
}