1 条题解

  • 0
    @ 2025-8-24 21:16:53

    自动搬运

    查看原文

    来自洛谷,原作者为

    avatar FJ_EYoungOneC
    这个人很勤快,但是他并不想留下什么

    搬运于2025-08-24 21:16:52,当前版本为作者最后更新于2024-12-13 16:43:13,作者可能在搬运后再次修改,您可在原文处查看最新版

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

    以下是正文


    解题思路

    数字 xx 是奇妙数字当且仅当 x=pax=p^a 其中 pp 为任意质数且 aa 为正整数。

    那么我们可以对 nn 进行质因子分解,并统计每个质数因子的个数。

    假设数字 nn 含有 99 个因子 22,那么可以凑出 21,22,232^1, 2^2, 2^3,共三个数。

    那么我们需要计算的就是 1+2++k>1+2+\dots+k > 因子的个数时 kk 的最小解,那么 k1k-1 就是答案。

    我们可以使用二分 ++ 等差数列求和公式进行计算,由于数据范围较小(long long 范围以内,质因子最多个数的即为 2632^{63}),直接模拟即可。

    AC_Code

    #include <iostream>
    #include <cstring>
    #include <algorithm>
    
    using namespace std;
    
    typedef long long LL;
    
    LL x;
    
    int calc(int x)
    {
        int res = 0, k = 1;
        while (x >= k)
        {
            res ++;
            x -= k ++;
        }
        return res;
    }
    
    int main()
    {
        cin >> x;
        
        LL res = 0;
        for (int i = 2; i <= x / i; ++ i )
        {
            int cnt = 0;
            while (x % i == 0)
                x /= i, cnt ++;
            if (cnt)
                res += calc(cnt);
        }
        
        if (x > 1)
            res ++;
        
        cout << res << endl;
        
        return 0;
    }
    
    • 1

    信息

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