第八屆藍橋杯C/C++省賽題:2,3,5,7,11,13,....是素數序列。 類似:7,37,67,97,127,157 這樣完全由素陣列成的等差數列,叫等差素數數列。 上邊的數列公差為30……
阿新 • • 發佈:2021-01-13
題目:
標題:等差素數列
2,3,5,7,11,13,…是素數序列。
類似:7,37,67,97,127,157 這樣完全由素陣列成的等差數列,叫等差素數數列。
上邊的數列公差為30,長度為6。
2004年,格林與華人陶哲軒合作證明了:存在任意長度的素數等差數列。
這是數論領域一項驚人的成果!
有這一理論為基礎,請你藉助手中的計算機,滿懷信心地搜尋:
長度為10的等差素數列,其公差最小值是多少?
注意:需要提交的是一個整數,不要填寫任何多餘的內容和說明文字。
思路:
- 首先要建立一個檢驗素數的函式,如果是素數返回1,不是返回0。
- 其次確定一個尋找素數的範圍,我這裡設定的是1~10000,然後設定一個公差的範圍,我這裡設定的是1~10000。(這個範圍是可以輸出正確的結果的)
- 使用兩層for迴圈巢狀一下即可。
- 這裡有一個問題,就是如果設定的素數範圍不夠或者公差範圍不夠的辦法,這個其實很好解決,直接把輸出和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