3 条题解

  • 2
    @ 2024-2-10 10:54:29

    WA AC, 放心食用

    #include <bits/stdc++.h> 
    using namespace std;
    bool shift(int n)//判断质数
    {
        for(int i = 2; i < n; i++)
        {
            if(n % i == 0)return false;
        }
        return true;
    }
    int main()
    {
        int n;
        cin >> n;
        for(int i = 2; i <= n - 2; i++)//枚举X1
        {
            if(shift(i))
            {
                for(int j = 2; j <= n - 4; j++)//枚举X2
                {
                    if(shift(j) && shift(n - i - j))
                    {
                        cout << i << ' ' << j << ' ' << n - i - j;
                        return 0;
                    }
                }
            }
        }
    }
    
    • 0
      @ 2023-7-20 18:44:38

      这不是哥德巴赫猜想

      • 0
        @ 2023-6-29 17:48:15
        #include <bits/stdc++.h>
        using namespace std;
        int n;
        bool p(int x){
            if (x<2){
                return 0;
            }
            for (int i=2;i*i<=x;i++){
                if (x%i==0){
                    return 0;
                }
            }
            return 1;
        }
        int main(){
            cin>>n;
            for (int i=2;i<=n-4;i++){//暴力即可,注意剪枝
                if (p(i)){
                    for (int j=i;j<=n-i-2;j++){
                        if (p(j)&&p(n-i-j)){//第三个数不用枚举
                            cout<<i<<" "<<j<<" "<<n-i-j<<endl;
                            return 0;
                        }
                    }
                }
            }
        }
        

        解释一下代码中循环的范围:为什么是 n4n-4 呢?因为 11 不是质数,那么拆分的每个数至少是 22。要保证每个数至少是 22 第一个数最大只能到 n4n-4,其他两个数都是 22。第二层循环范围同理。

        • 1

        信息

        ID
        874
        时间
        1000ms
        内存
        16MiB
        难度
        2
        标签
        递交数
        33
        已通过
        23
        上传者