2017藍橋杯模擬題等差素數列
題目:等差素數列
2,3,5,7,11,13,....是素數序列。
類似:7,37,67,97,127,157 這樣完全由素陣列成的等差數列,叫等差素數數列。
上邊的數列公差為30,長度為6。
2004年,格林與華人陶哲軒合作證明了:存在任意長度的素數等差數列。
這是數論領域一項驚人的成果!
有這一理論為基礎,請你藉助手中的計算機,滿懷信心地搜尋:
長度為10的等差素數列,其公差最小值是多少?
注意:需要提交的是一個整數,不要填寫任何多餘的內容和說明文字。 210
程式碼
這個題,我們可以用列舉,來進行計算。#include <bits/stdc++.h>
using namespace std;
int num[100005];
int vis[1000005],maxn;
void init(){
memset(vis,0,sizeof(vis));
maxn = 0;
for(int i=2;i<=1000000;i++){
if(vis[i])continue;
num[maxn]=i;
maxn++;
for(int j=i+i;j<=1000000;j+=i){
vis[j]=true;
}
}
}
bool judge(int a,int b){
int F = 0;
for(int i=num[b];i<=1000000;i+=a){
if(vis[i]==true)break;
F++;
}
if(F>=10){
for(int i=num[b];i<=1000000;i+=a){
if(vis[i]==true)break;
printf("%d\n",i);
}
return true;
}
return false;
}
int main(){
init();
for(int i=1;i<=1000;i++){
for(int j=1;j<=maxn;j++){
if(judge(i,j)){
printf("%d\n",i);
return 0;
}
}
}
}