• 第八届蓝桥杯省赛第二题---等差素数列


    标题:等差素数列

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

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

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

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

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

    分析:这道题目思路挺简单的,就是用线性筛选法把10^6内的素数筛选出来,然后从大到小枚举然后去验证

    关键是一定要掌握线性筛选法。。。

     1 #include<iostream>
     2 #include<cstdio>
     3 using namespace std;
     4 #define ll long long
     5 const int maxn=1e6;
     6 int check[maxn]={0};
     7 int prime[maxn];
     8 int pos;
     9 
    10 void init(){//线性筛选法
    11     for( ll i=2; i<maxn; i++ ){
    12         if(!check[i]){
    13             prime[pos++]=i;
    14         }
    15         for( ll j=0; j<pos&&i*prime[j]<maxn; j++ ){
    16             check[i*prime[j]]=1;
    17             if(i%prime[j]==0) break;
    18         }
    19     }
    20 }
    21 
    22 int main(){
    23     init();
    24     for(int k=1; k*10<maxn; k++ ){//k为公差
    25         for( int i=0; i<pos; i++ ){
    26             int flag=1,temp=prime[i];
    27             for( int j=1; j<10; j++ ){
    28                 if(temp+k>=maxn||check[temp+k]==1){
    29                     flag=0;
    30                     break;
    31                 }
    32                 else{
    33                     temp+=k;
    34                 }
    35             }
    36             if(flag==1){
    37                 cout<<k<<" "<<prime[i]<<endl;
    38             }
    39         }
    40     }
    41 
    42     return 0;
    43 }
    44 //210 199
    有些目标看似很遥远,但只要付出足够多的努力,这一切总有可能实现!
  • 相关阅读:
    RestTemplateConfig写法,用于配置Template引擎模板
    RedisUtil写法,好用
    ftpUtil写法,记录一下
    生成唯一id写法,雪花算法
    base64编码转图片,图片转base64编码
    MultipartFile上传图片的写法,记录一下。
    httpClientUtil的put请求
    httpClientUtil的post请求
    python time和datetime
    ubuntu16.04TLS软件源update
  • 原文地址:https://www.cnblogs.com/Bravewtz/p/10344482.html
Copyright © 2020-2023  润新知