原题链接:
注意点:
1.当N=1,N=2时的处理;
2.当N=39时的处理;
代码:
#include <iostream>
#include <vector>
#include <math.h>
#include <utility>
using namespace std;
#define endl '\n'
#define int long long
const int maxN = 1e5 + 10;
vector<int> prime(maxN, 1);
vector<pair<int, int>> ans;
int N;//long int
signed main() {
ios::sync_with_stdio(0), cin.tie(0), cout.tie(0);
for (int i = 2; i < maxN; i++) {
for (int j = 2; i*j < maxN; j++) {
prime[i * j] = 0;
}
}
cin >> N;
int num = N;
double Scale = sqrt(N);
for (int i = 2; i <= Scale; i++) {
if (prime[i]) {
if (N == 1) {
break;
}
int cnt = 0;
while (N % i == 0) {
cnt++;
N /= i;
}
if (cnt != 0) {
ans.emplace_back(make_pair(i, cnt));
}
}
}
cout << num << "=";
int tmp = 1;
for (int i = 0; i < ans.size(); i++) {
cout << ans[i].first;
if (ans[i].second > 1) {
cout << "^" << ans[i].second;
}
if (i != ans.size() - 1) {
cout << "*";
}
tmp *= pow(ans[i].first, ans[i].second);
}
if (ans.size()==0) {
cout << num;
tmp = num;
}
if (tmp != num) {
cout << "*" << num / tmp;
}
return 0;
}
554

被折叠的 条评论
为什么被折叠?



