OJ題:驗證哥德巴赫猜想(C++)

新人第一次寫博客,望各位dalao狠狠的批評我一下,我會努力改進的。

一道自改的題目:Goldbach conjecture問題,即驗證任意一個大於6的偶數,都可以寫成兩個素數的和。

輸入兩個整數m,n(6<m<=n<=100) ,輸出m,n閉區間內所有偶數的哥德巴赫猜想形式,注需要輸出所有的加法表達形式

例: 輸入 30 32

輸出 :

7+23=30
11+19=30
13+17=30
3+29=32
13+19=32

題目自己進行了部分改編,由僅輸出一個解變爲輸出所有的解,另有一道題的要求是輸出解的個數,多用個變量計數就可以了。

//不經大腦的任性枚舉就足以解答這道題了,暴搜也可以 ,但是暴搜也好,枚舉也好,數量都不能太大,不然可能會超時。。。

時間複雜度爲0(n3)

//代碼如下:

#include<iostream>
#include<vector>
using namespace std;
vector<int> sum;
int main()
{

   //用於存放素數

    for(int i=2;i<=100;i++)
    {
        for(int j=2;j<i;j++)
            if(i%j == 0) break;
            else if(j == i-1) sum.push_back(i);
    }
    int n,m;

    //輸入下界m和上界n

    cin>>m>>n;

    for(int i=m;i<=n;i++)
    {

        //區間內整數奇偶性判斷

        if(i%2 == 0)
        {
            for(int j=0;j<sum.size();j++)
            {
                //區間數與素數數組值進行判斷

                if(sum[j]>i)break;
                else
                {
                    for(int l=j;l<sum.size();l++)
                        if(sum[j]+sum[l] == i)

                        //輸出表達式的值

                        cout<<sum[j]<<"+"<<sum[l]<<"="<<i<<endl;
                }
            }
        }
    }
    return 0;
}

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章