1 solutions

  • 1
    @ 2024-6-1 14:53:55
    #include<bits/stdc++.h>
    using namespace std;
    const int N=1e6+10;
    bool st[N],idx;
    vector<int> p;
    void get(int n)
    {
        for(int i=2;i<=n;i++) //枚举所的数
        {
            if(!st[i]) p.push_back(i); //当前数没有被标记过,说明不是质数
            for(int j=0;p[j]*i<=n;j++) //枚举i的质数倍
            {
                st[i*p[j]]=1; //标记
                if(i%p[j]==0) //如果p[j]是i的因子,那么标记跳出循环,
                {
                    break;
                }
            }
        }
    }
    int main()
    {  
        get(N-1);
        int n;
        while(scanf("%d",&n),n)
        {
            for(int i=1;i<p.size();i++)
            {
                int a=p[i];
                int b=n-a;
                if(!st[b])
                {
                    printf("%d = %d + %d\n",n,a,b);
                    break;
                }
            }
        }
        return 0;
    }
    
    • 1

    Information

    ID
    983
    Time
    1000ms
    Memory
    256MiB
    Difficulty
    5
    Tags
    (None)
    # Submissions
    42
    Accepted
    9
    Uploaded By