新人第一次寫博客,望各位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;
}