本题坑点:
1.输入的数可能是1,1的素数分解为"1=1"
2.素数表的建立不宜太大,太大可能会导致运行超时,建10000以内的素数表已经能满足本题需求
代码如下:
#include <iostream>
#include <vector>
#include <cmath>
#include <map>
using namespace std;
vector<int> v;
map<int,int> m;
int ss(int n){
int bj=1;
for (int i=2;i<=sqrt(n);i++){
if (n%i==0){
bj=0;
return bj;
}
}
if (n==1){
bj=0;
}
return bj;
}
int main(){
long long n,t;
scanf("%lld",&n);
t=n;
if (n==1){
printf("1=1");
return 0;
}
for (int i=2;i<=10000;i++){
if (ss(i)==1){
v.push_back(i);
}
}
int index=0;
while(n!=1){
for (int i=index;i<v.size();i++){
if (n%v[i]==0){
index=i;
n=n/v[i];
m[v[i]]++;
break;
}
}
}
printf("%lld=",t);
for (auto it=m.begin();it!=m.end();it++){
if (it!=m.begin()){
printf("*");
}
printf("%lld",it->first);
if (it->second!=1){
printf("^%d",it->second);
}
}
return 0;
}