提供几个测试点:1(其中一个测试点), 6。
我这个打表好像没啥用,如果是一次要判断多个数字,把最大那个打表,就可以降低复杂度了。
#include <bits/stdc++.h>
using namespace std;
map<long long, int> mp;
vector<long long> v;
bool isPrime(long long n) {
if (n <= 1) return false;
for (long long i = 2; i <= sqrt(n); i++) {
if (n % i == 0) return false;
}
return true;
}
void init(long long n) {
for (int i = 2; i <= sqrt(n) + 1; i++) {
if (isPrime(i)) v.push_back(i);
}
}
int main() {
long long n, ans;
scanf ("%lld", &n);
ans = n;
init(n);
if (n == 1) {
printf ("1=1");
return 0;
}
for (long long i = 0; i < v.size(); i++) {
if (n == 0) break;
while (n % v[i] == 0) {
mp[v[i]]++;
n = n / v[i];
}
}
if (n != 0 && n != 1) mp[n]++;
printf ("%lld=", ans);
for (auto it = mp.begin(); it != mp.end(); it++) {
if (it != mp.begin()) printf("*");
if (it->second != 1) printf ("%lld^%d", it->first, it->second);
else printf ("%d", it->first);
}
}