两个注意要点:
1、从小到大找符合的prime
2、如果输入1,输出1=1
#include<iostream>
#include<map>
#include<math.h>
using namespace std;
map<int, int>result;
int judgePrime(int n) {
for (int i = 2; i <= sqrt(n); i++) {
if (n % i == 0)
return 0;
}
return 1;
}
int main() {
long n; cin >> n; int back = n;
if (n == 1) {
cout << "1=1";
return 0;
}
int i = 2;
while(n!=1){
if (n >= i && n % i == 0) {
if (judgePrime(i)) {
result[i]++;
n = n / i;
}
else if (i == 2) i = 3;
else i += 2;
}
else if (i == 2) i = 3;
else i += 2;
}
printf("%ld=", back);
int size = result.size(); int count = 1;
for (auto it : result) {
cout << it.first;
if (it.second != 1) cout << "^" << it.second;
if (count != size) cout << "*";
count++;
}
return 0;
}