1 条题解

  • 2
    @ 2024-6-13 1:03:09

    【题目大意】给一个完全平方数的标准,推导出哪些是超级幸运数,然后判断 N个数字中,哪些是超级幸运数,是的输出“lucky”,不是的输出离该数字最近的比它大的数字。

    【考纲知识点】数学知识,埃筛知识,循环知识

    【解题思路】完全平方数按照定义,包括1,4,9,16,25……。超级幸运数还可以是完全平方数的倍数,因此 8,12,18……也是超级幸运数。数据范围比较大,1e6,用埃筛的模板,判断每一个数字是否是幸运数字。不是幸运数字的话,保留离它最近的幸运数字作为答案。最终完成整个查询。

    【参考程序】

    #include <bits/stdc++.h>
    using namespace std;
    const int N = 1001 * 1001;
    const double eps = 1e-8;
    bool is_lucky[N + 5];
    int next_lucky[N + 5];
    int main()
    {
        int a, T;
        cin >> a >> T;
        for (int i = 1; i <= N; i++)
        {
            int t = int(sqrt(i) + eps);
            if (i >= a && t * t == i)
                is_lucky[i] = 1;
            if (!is_lucky[i])
                continue;
            for (int j = i + i; j <= N; j += i)
            {
                is_lucky[j] = 1;
            }
        }
        for (int i = N; i > 0; i--)
            next_lucky[i] = is_lucky[i] ? i : next_lucky[i + 1];
        while (T--)
        {
            int x;
            cin >> x;
            if (is_lucky[x])
                cout << "lucky" << endl;
            else
                cout << next_lucky[x] << endl;
        }
    }
    
    • 1

    [GESP202312 五级] 小杨的幸运数

    信息

    ID
    575
    时间
    1000ms
    内存
    512MiB
    难度
    8
    标签
    递交数
    115
    已通过
    21
    上传者