zoukankan      html  css  js  c++  java
  • [蓝桥杯2017初赛]等差素数列

    题目描述

    2,3,5,7,11,13,....是素数序列。
    类似:7,37,67,97,127,157 这样全由素数组成的等差数列,叫等差素数数列。
    上边的数列公差为30,长度为6。
    2004年,格林与华人陶哲轩合作证明了:存在任意长度的素数等差数列。
    这是数论领域一项惊人的成果!
    有这一理论为基础,请你借助手中的计算机,满怀信心地搜索:
    长度为10的等差素数列,其公差最小值是多少?

    输出

    输出一个整数表示答案
     

    答案:210

    题解:先素数打表,然后枚举公差和首项,条件判断又十个等差数列就可以

    #include<iostream>
    #include<queue>
    #include<algorithm>
    #include<set>
    #include<string.h>
    #define mx 1000000
    using namespace std;
    int prim[mx],a[mx];
    int t=0;
    void init()//素数打表
    {
        memset(prim,0,sizeof(prim));
        prim[1]=1;
        for(int i=2;i<mx;i++)
        {
            if(prim[i])//是偶数
                continue;
           
            for(int j=i<<1;j<mx;j=j+i)//把素数的倍数标记
                prim[j]=1;
        }
    
        for(int i=2;i<=mx;i++)//保存素数
            if(prim[i]==0)
                a[t++]=i;
    }
    
    int main()
    {
        init();
        int flag=0;
        //cout<<t<<endl;
        for(int d=1;d<10000;d++)
        {
            for(int i=0;i<t;i++)
            {
                int cnt=1;
                for(int j=1;j<=9;j++)
                {
                    int x=a[i]+j*d;
                    if(prim[x]==0)
                        cnt++;
                    else
                        break;
                }
                if(cnt==10)
                {
                    cout<<d<<endl;
                    flag=1;
                    break;
                }
            }
            if(flag==1)
                break;
        }
        return 0;
    }
  • 相关阅读:
    hdu 2881 Jack's struggle(DP)
    [置顶] DataGridView控件---绑定数据方法
    Computational Geometry Template_Polygon
    Max retries exceeded with url
    Linux /proc 的意义
    [置顶] 生成树协议介绍
    StringBuffer与StringBuilder的异同
    linux 下Eclipse for C/C++的不常见设置
    [Elasticsearch] 分布式搜索
    oracle递归函数
  • 原文地址:https://www.cnblogs.com/-citywall123/p/12331494.html
Copyright © 2011-2022 走看看