蓝桥杯 等差素数列(枚举)


标题:等差素数列

2,3,5,7,11,13,....是素数序列。
类似:7,37,67,97,127,157 这样完全由素数组成的等差数列,叫等差素数数列。
上边的数列公差为30,长度为6。

2004年,格林与华人陶哲轩合作证明了:存在任意长度的素数等差数列。
这是数论领域一项惊人的成果!

有这一理论为基础,请你借助手中的计算机,满怀信心地搜索:

长度为10的等差素数列,其公差最小值是多少?

注意:需要提交的是一个整数,不要填写任何多余的内容和说明文字。

 1 #include<iostream>
 2 
 3 using namespace std;
 4 
 5 bool isPrime(int n)    //判断是否为素数 
 6 {
 7     if(n == 0 || n == 1)
 8         return false;
 9     if(n == 2)
10         return true;
11         
12     for(int i = 2; i < n; ++i)
13     {
14         if(n % i == 0)
15             return false;
16     } 
17     return true;
18 
19 }
20 
21 int prime[100000];    //用于保存所有素数 
22 
23 int main()
24 {
25     int index = 0;
26     for(int i = 2; i <= 100000; ++i)
27     {
28         if(isPrime(i))
29         {
30             prime[index] = i;    //将素数都保存在prime数组中 
31             index++;
32         }    
33     }
34     
35     //对素数数组中的所有数进行枚举
36     for(int i = 0; i <= index; ++i)    //i表示素数数组的下标 
37     {
38         for(int d = 3; d <= 500; ++d)    //d为公差 
39         {
40             int j;
41             //首先判断prime[i]+d是否是素数,如果是,继续判断prime[i]+2*d是否是素数,依次类推,连续10次 
42             for(j = 0; j < 10; ++j)    
43                 if(!isPrime(prime[i] + j*d))
44                     break;
45             
46             if(j == 10)
47             {
48                 cout << d << endl;
49                 return 0; 
50             } 
51         }
52     } 
53     
54     
55     return 0;
56 }

最终结果:210

 

原文地址:https://www.cnblogs.com/FengZeng666/p/10547672.html