思路:
质因数分解,注意特判情况
代码:
#include <bits/stdc++.h>
using namespace std;
#define ll long long
int isprime(ll x){
if(x==2) return 1;
for(ll i=2;i<=(ll)sqrt(1.0*x);i++) if(x%i==0) return 0;//注意sqrt写法
return 1;
}
vector<ll> p;//n所有的质数因子
void prime(ll n){
for(ll i=2;i<=(ll)sqrt(1.0*n);i++) if(isprime(i)&&(n%i==0)) p.push_back(i);
}
struct pri{
ll x;
int cnt;
};
vector<pri> v;
int main()
{
long long n;
cin>>n;
cout<<n<<"=";
prime(n);
if(n==1||isprime(n)){//注意特判情况
cout<<n;
return 0;
}
for(int i=0;i<p.size();i++){
if(n<2) break;
pri tmp;
tmp.x=p[i], tmp.cnt=0;
while(n%p[i]==0){
tmp.cnt++;
n /= p[i];
}
v.push_back(tmp);
}
for(int i=0;i<v.size()-1;i++){
cout<<v[i].x;
if(v[i].cnt>1) cout<<'^'<<v[i].cnt;
cout<<'*';
}
cout<<v[v.size()-1].x;
if(v[v.size()-1].cnt>1) cout<<'^'<<v[v.size()-1].cnt;
return 0;
}