1 条题解

  • 0
    @ 2025-8-24 22:57:43

    自动搬运

    查看原文

    来自洛谷,原作者为

    avatar rui_er
    九万里风鹏正举

    搬运于2025-08-24 22:57:43,当前版本为作者最后更新于2024-04-05 16:00:37,作者可能在搬运后再次修改,您可在原文处查看最新版

    自动搬运只会搬运当前题目点赞数最高的题解,您可前往洛谷题解查看更多

    以下是正文


    考查内容:

    • 【3】整数唯一分解定理。
    • 【3】贪心法。

    xx 的唯一分解为 i=1mpiαi\prod_{i=1}^mp_i^{\alpha_i},也就是说 xx 可以被划分为 mm 个质数的若干次幂的乘积。

    xx 为一个质数的正整数次幂时,无法进行任何操作,因此答案为 xx

    xx 为“无平方因子数”(Square-Free Number)时,一次操作只能消除掉 xx 的两个不同质因子。若 2m2\mid m,此时 xx 可以变成 11;若 2m2\nmid m,此时必定剩下一个质因数无法被消除,取最小的质因数即可。

    否则,答案一定为 11。这是由于若 2m2\mid m,每次消除两个不同质因子即可;若 2m2\nmid m,可以将一个 αi2\alpha_i\ge 2 对应的 pip_i 拆分到两次操作中,转化为 2m2\mid m 的情况。

    int x, y;
    cin >> x; y = x;
    vector<tuple<int, int>> div;
    bool squarefree = true;
    for(int i = 2; i * i <= x; ++i) {
        if(x % i == 0) {
            int cnt = 0;
            for(; x % i == 0; x /= i) ++cnt;
            div.emplace_back(i, cnt);
            if(cnt >= 2) squarefree = false;
        }
    }
    if(x > 1) div.emplace_back(x, 1);
    if((int)div.size() == 1) cout << y << endl;
    else if(squarefree) {
        if((int)div.size() & 1) cout << get<0>(div[0]) << endl;
        else cout << 1 << endl;
    }
    else cout << 1 << endl;
    
    • 1

    信息

    ID
    9991
    时间
    1000ms
    内存
    512MiB
    难度
    3
    标签
    递交数
    0
    已通过
    0
    上传者