2 条题解

  • 0
    @ 2024-10-21 9:16:08

    简单的埃氏筛应用

    #include<bits/stdc++.h>
    using namespace std;
    const int N = 1e6 + 7;
    int a[N];
    int ans[N];
    int cnt = 0;
    void su()
    {
        a[1] = 1;
        for(int i = 2; i <= N; i ++)
        {
            if(!a[i])
            {
                cnt ++;
                ans[cnt] = i;
                for(int j = i + i; j <= N; j += i)
                {
                    a[j] = 1;
                }
            }
        }
    }
    int main()
    {
        su();//埃氏筛筛出所有素数存在ans数组里
        int t;
        scanf("%d", &t);
        while(t --)
        {
            int n;
            scanf("%d", &n);
            int mx = -1;
            for(int i = cnt; i >= 1; i --)//循环暴力求解
            {
                if(ans[i] < n && a[n - ans[i]] == 0)//如果这个数小于n并且n-这个数也是素数就可以对答案做出贡献
                {
                    if(mx < ans[i] * (n - ans[i]))//更新最大值
                    {
                        mx = ans[i] * (n - ans[i]);
                    }
                }
            }
            printf("%d\n",mx);
        }
    }
    

    信息

    ID
    1020
    时间
    1000ms
    内存
    256MiB
    难度
    8
    标签
    递交数
    221
    已通过
    28
    上传者