https://www.luogu.com.cn/record/156977790
对于题解中的给出的调用系统函数思路进行了 cpp 风格的封装。
原题解:https://www.luogu.com/article/y2bnvunz
大致思路就是调用 Linux 的 factor
函数,取出输出内容,然后格式化一下。所有因数会从小到大存在 pr(n, v)
的 $v$ 中。
typedef long long ll;
void execCMD(const char *cmd, string &result)
{
char buf_ps[1024];
char ps[1024] = {0};
FILE *ptr;
strcpy(ps, cmd);
if ((ptr = popen(ps, "r")) != NULL)
{
while (fgets(buf_ps, 1024, ptr) != NULL)
result += buf_ps;
pclose(ptr);
ptr = NULL;
}
}
void pr(ll n, auto &v)
{
string s = to_string(n);
string cmd = "factor " + s;
v.clear();
string t = "";
execCMD(cmd.c_str(), t);
t.erase(0, s.size() + 2);
ll d = 0;
for (char c : t)
{
if (isdigit(c))
(d *= 10) += c ^ '0';
else
v.push_back(d), d = 0;
}
}