0分求助
查看原帖
0分求助
1059639
_is_laofang_楼主2024/7/15 13:07
#include<bits/stdc++.h>
using namespace std;
inline bool isp(int n){
	for(int i=2;i*i<=n;i++){
		if(n%i==0)return false;
	}
	return true;
}
int main(){
	long long n;
	cin>>n;
	deque<int>ns;
	map<int,int>mp;
	int n_=2;
	while(n!=1){
		if(isp(n_)){
			while(n%n_==0)n/=n_;
			ns.push_back(n_);
		}
		n_++;
	}
	for(int i=0;i<ns.size();i++){
		if(i==0||ns[i-1]!=ns[i]){//这里有短路特性,所以不会越界
			mp[ns[i]]=1;
		}else mp[ns[i]]++;
	}
	for(int i=0;i<ns.size();i++){
		if(mp[ns[i]]==1){
			if(mp.size()==1){
				cout<<ns[i];
				return 0;
			}else if(i+mp[ns[i]]==n){//最后一个元素
				cout<<ns[i];
			}else{
				cout<<ns[i]<<' * ';
			}
		}else{
			if(mp.size()==1){
				cout<<ns[i]<<'^'<<mp[ns[i]];
				return 0;
			}else if(i+mp[ns[i]]==n){//最后一个元素
				cout<<ns[i]<<'^'<<mp[ns[i]];
			}else{
				cout<<ns[i]<<'^'<<mp[ns[i]]<<' * ';
			}
		}
	}
    return 0;
}
2024/7/15 13:07
加载中...