等差素数数列-蓝桥杯

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

上边的数列公差为 30,长度为 6。 2004 年,格林与华人陶哲轩合作证明了:存在任意长度的素数等差数列。 这是数论领域一项惊人的成果! 有这一理论为基础,请你借助手中的计算机,满怀信心地搜索: 长度为 10 的等差素数列,其公差最小值是多少? 注意:需要提交的是一个整数,不要填写任何多余的内容和说明文字。

答案:210

题解:枚举公差,等差数列一定满足通项公式:An=a1+(n-1)*d,三个for循环,分别枚举a1,d,n就行了

#include<iostream>
#include<string.h>
#include<algorithm>
#include<math.h>
#include<vector>
using namespace std;
int a[1000005],vis[1000005];
vector<int>p;
int main()
{
    memset(vis,0,sizeof(0));
    int n,t=1;
    cin>>n;
    a[0]=2;
    for(int i=3;i<=n;i=i+2)
    {
        int j,mid;
        mid=sqrt(i);
        for(j=3;j<=mid;j=j+2)
        {
            if(i%j==0)
                break;
        }
        if(j>mid)
        {
            a[t]=i;
            vis[a[t]]=1;
            t++;
        }
    }
    for(int i=0;i<t;i++)
    {
        for(int d=1;d<1000;d++)
        {
            for(int x=1;x<=10;x++)
            {
                if(vis[a[i]+(x-1)*d])
                {
                    if(x==10)
                    {
                        p.push_back(d);
                        break;
                    }
                }
                else
                    break;
            }
        }
    }
    sort(p.begin(),p.end());
    for(vector<int>::iterator it=p.begin();it!=p.end();it++)
    {
        cout<<*it<<endl;
    }
    //system("pause");
    return 0;

}
原文地址:https://www.cnblogs.com/-citywall123/p/10562125.html