题解 | #质数因子# 本地通过
质数因子
https://www.nowcoder.com/practice/196534628ca6490ebce2e336b47b3607
#include <iostream>
#include <cmath>
#include <vector>
#include <algorithm>
using std::cout, std::endl, std::cin;
std::tuple<int, int> resolve(int& accumulate) {
if (accumulate < 2) {
return std::make_tuple(-1, -1);
}
int discontinue = pow(accumulate, 0.5);
for (int i = 2; i <= discontinue; i++) {
if (accumulate % i == 0) {
return std::make_tuple(i, accumulate / i);
}
}
return std::make_tuple(0, 0);
}
int main(int argc, char* argv[]) {
int num, v0, v1;
cin >> num;
std::vector<int> factor;
std::tuple<int, int> tmp = resolve(num);
if (tmp == std::make_tuple(-1, -1)) {
return 1;
} else if (tmp == std::make_tuple(0, 0)) {
cout << 1 << " " << num << endl;
return 0;
}
for (int i = 0; i < pow(num, 0.5); i++) {
if (tmp == std::make_tuple(0, 0)) {
break;
} else {
v0 = std::get<0>(tmp);
v1 = std::get<1>(tmp);
factor.push_back(v0);
tmp = resolve(v1);
}
}
factor.push_back(v1);
std::sort(factor.begin(), factor.end());
std::for_each(factor.begin(), factor.end(), [&](int it) {
cout << it << " ";
});
std::endl(cout);
return 0;
}
线上调试通过,线上为 C++11 标准编译未通过。
