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;
    }
}
最后修改:2024 年 04 月 25 日
v我50吃疯狂星期四