1. 程式人生 > 其它 >第八屆藍橋杯C/C++省賽題:2,3,5,7,11,13,....是素數序列。 類似:7,37,67,97,127,157 這樣完全由素陣列成的等差數列,叫等差素數數列。 上邊的數列公差為30……

第八屆藍橋杯C/C++省賽題:2,3,5,7,11,13,....是素數序列。 類似:7,37,67,97,127,157 這樣完全由素陣列成的等差數列,叫等差素數數列。 上邊的數列公差為30……

技術標籤:練習題c++演算法資料結構

題目:

標題:等差素數列

2,3,5,7,11,13,…是素數序列。
類似:7,37,67,97,127,157 這樣完全由素陣列成的等差數列,叫等差素數數列。
上邊的數列公差為30,長度為6。

2004年,格林與華人陶哲軒合作證明了:存在任意長度的素數等差數列。
這是數論領域一項驚人的成果!

有這一理論為基礎,請你藉助手中的計算機,滿懷信心地搜尋:

長度為10的等差素數列,其公差最小值是多少?

注意:需要提交的是一個整數,不要填寫任何多餘的內容和說明文字。

思路:

  1. 首先要建立一個檢驗素數的函式,如果是素數返回1,不是返回0。
  2. 其次確定一個尋找素數的範圍,我這裡設定的是1~10000,然後設定一個公差的範圍,我這裡設定的是1~10000。(這個範圍是可以輸出正確的結果的)
  3. 使用兩層for迴圈巢狀一下即可。
  4. 這裡有一個問題,就是如果設定的素數範圍不夠或者公差範圍不夠的辦法,這個其實很好解決,直接把輸出和return 0;放在迴圈裡就可以了,如果有結果就輸出,沒有結果就說明範圍不夠,重新更改一下範圍就好了。

程式碼:

(使用clang++編譯通過)

#include<iostream>
using namespace std;
int isPrime(int n)
{
    for(int i=n-1;i>1;i--)
    {
        if(n%i==0)
            return 0;
    }
    return 1;
}
int main() { int i,j; for(i=1;i<10000;i++) { for(j=1;j<1000;j++) { if(isPrime(i)&&isPrime(i+j)&&isPrime(i+2*j) &&isPrime(i+3*j)&&isPrime(i+4*j)&&isPrime(i+5*j) &&isPrime(i+6*j)&&isPrime
(i+7*j)&&isPrime(i+8*j) &&isPrime(i+9*j)) { cout<<j<<endl; return 0; } } } return 0; }

結果為210