题目 :                                            等差素数列

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

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

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

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

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



代码解析过程:


/*将本程序所有代码粘贴在 DEV C++ 中可直接执行*/ 

#include<iostream>
#include<string>
#include<fstream>
#include<windows.h> 

using namespace std;

#define MAX_NUM 9591 //本人通过该程序算出10万以内的素数为9591个,固自认为该题让所求的素数列最大值在10万以内 
int prime[MAX_NUM]; //如果该题给出的答案中的素数列中的最大值大于10万,则怪本人自以为是或者低估了蓝桥杯对竞赛者的要求 

bool jud_prime(int value); //判断传入的参数是否为素数的函数
void savedata(); //将10万以内的素数利用文件流输入到记事本中(可不必须输出到记事本,本人为了脚踏实地确认数值是否正确). 
void readdata(); //将10万以内的素数从记事本读入自定义数组中 
bool isexist(int tolerance); //判断公差为传入参数的等差素数列是否存在
int get_primenums(int tolerance,int long_limit);
int array_data = 0;
void output();

int main(int argc,char** argv){

cout << "\n\n\n\n\n\n\n\n    因数据量过于庞大,计算过为复杂,再加上本人才学疏浅,算法不够精深,导致本程序会根据机器不同在一分钟不等时间内将计算结果显示出来,请各位不要着急,稍安毋躁";
system("color 1e");

savedata();
readdata();

output();

cout << endl;

system("pause");

return 0;
}

void savedata(){

ofstream fout;
fout.open("lanyue.txt");


int test_value = 2;
int i_temp = 0;

while(test_value != 100000){

if(jud_prime(test_value)){

prime[i_temp] = test_value;
i_temp++;
fout << test_value << "    ";

}

test_value++;
}

fout.close();
}

void readdata(){

ifstream fin;
fin.open("lanyue.txt");
int sign = 0;

while(fin){

fin >> prime[sign];
sign++;
}

fin.close();
}

bool jud_prime(int value){

if(value == 2 || value == 3){

return true;

}else{

for(int i = 2;i < value;i++){

if(value % i == 0){

return false;

}else{

if(i == value - 1){

return true;
}
}
}
}

}

bool isexist(int tolerance){ //判断10万以内的素数中是否存在公差为tolerance的等差素数列 

int jud_nums = 0;
int data_temp = 0;

for(int i = 0;i < MAX_NUM;i++){

int nums = 0;
data_temp = prime[i];

for(int j = i + 1;j < MAX_NUM;j++){

if(data_temp + tolerance == prime[j]){

nums++;
data_temp = prime[j];

if(nums >= 2){

return true;
}

}
}

}

return false;
}

int get_primenums(int tolerance,int long_limit){ //将10万以内的等差素数中公差为tolerance,项数大于long_limit的等差素数列显示出来 

int data_temp = 0;
int nums = 1;
array_data = long_limit;

int array_[array_data];

for(int i = 0;i < MAX_NUM;i++){

data_temp = prime[i];
nums = 1;

for(int j = i + 1;j < MAX_NUM;j++){

if(data_temp + tolerance == prime[j]){

array_[nums - 1] = data_temp;

if(nums == array_data - 1){

array_[nums] = prime[j];
}

nums++;
data_temp = prime[j];
}

if(j == MAX_NUM - 1 && nums == long_limit){ //判断如果循环到10万以内最大的素数并且该数列的项数大于您传入参数时,将该数列显示出来。 

cout << endl << endl << "公差为 " << tolerance << " 的等差素数列在 " << "0 - " << 100000 << " 以内共有 " << nums << " 项" << endl;

for(int i = 0;i < array_data;i++){

cout << array_[i] << "  ";
}

}

}

}

}

void output(){

Sleep(5000);
system("cls");

for(int i = 1;i < 500;i++){ //可以自己更改i的值来改变等差素数列的最大公差 

if(isexist(i)){

get_primenums(i,10); //get_primenums(int data1,int data2)中第一个参数用来控制等差数据的公差,第二个参数用来控制等差数列的项数。 
}
}

}

计算结果如下:

从图中可以看出10万以内的项数为10的等差素数列有两个,其中最小公差为210.

2017蓝桥杯等差素数(C++B组)的更多相关文章

  1. 2017蓝桥杯九宫幻方(C++B组)

    题目:九宫幻方    小明最近在教邻居家的小朋友小学奥数,而最近正好讲述到了三阶幻方这个部分,三阶幻方指的是将1~9不重复的填入一个3*3的矩阵当中,使得每一行.每一列和每一条对角线的和都是相同的. ...

  2. 2017蓝桥杯贪吃蛇(C++C组)

    原题: 贪吃蛇长度+-------------------------------------------------+|                                        ...

  3. 2013第四届蓝桥杯决赛Java高职高专组题目以及解法答案

    2013第四届蓝桥杯决赛Java高职高专组题目以及解法答案 不知不觉离决赛都过去一个月了,一直忙于各种事情,都忘记整理一份试题.当作回忆也好. 1. 标题:好好学习 汤姆跟爷爷来中国旅游.一天,他帮助 ...

  4. 2021蓝桥杯省赛C++A组试题E 回路计数 状态压缩DP详细版

    2021蓝桥杯省赛C++A组试题E 回路计数 状态压缩DP 题目描述 蓝桥学院由21栋教学楼组成,教学楼编号1到21.对于两栋教学楼a和b,当a和b互质时,a和b之间有一条走廊直接相连,两个方向皆可通 ...

  5. 2017第八届蓝桥杯C/C++语言A组

    一:题目: 标题:迷宫 X星球的一处迷宫游乐场建在某个小山坡上.它是由10x10相互连通的小房间组成的. 房间的地板上写着一个很大的字母.我们假设玩家是面朝上坡的方向站立,则:L表示走到左边的房间,R ...

  6. 2017蓝桥杯省赛C/C++B(补题中)

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

  7. 2016第七届蓝桥杯C/C++语言A组

    一:问题: 某君新认识一网友.当问及年龄时,他的网友说:“我的年龄是个2位数,我比儿子大27岁,如果把我的年龄的两位数字交换位置,刚好就是我儿子的年龄” 请你计算:网友的年龄一共有多少种可能情况? 提 ...

  8. 2018第九届蓝桥杯决赛(C++ B组)

    逛了大半个北京还是挺好玩de 第一题 标题:换零钞 x星球的钞票的面额只有:100元,5元,2元,1元,共4种. 小明去x星旅游,他手里只有2张100元的x星币,太不方便,恰好路过x星银行就去换零钱. ...

  9. 蓝桥杯 2014本科C++ B组 奇怪的分式 暴力枚举

    蓝桥杯 枚举 奇怪的分式 标题:奇怪的分式 上小学的时候,小明经常自己发明新算法.一次,老师出的题目是: 1/4 乘以 8/5 小明居然把分子拼接在一起,分母拼接在一起,答案是:18/45 (参见图1 ...

随机推荐

  1. git常规使用命令笔记

    使用git也有不短的时间,这篇文章主要默写自己在提交代码经常使用的一些密令,仅供参考并不是教程. git log 查看日志 git branch 查看分值 git branch Name 新建一个Na ...

  2. js 完美运动框架

    <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/ ...

  3. (转)bss段和.data的是是非非

    原文地址:http://zqwt.012.blog.163.com/blog/static/12044684201101214457186/ 一般情况下,一个程序本质上都是由 bss段.data段.t ...

  4. annaconda的安装及使用

    一.安装 1.安装包下载: 方式1:官网:https://www.anaconda.com/distribution/ 方式2:清华镜像源:https://mirrors.tuna.tsinghua. ...

  5. SSM整合搭建(二)

    本页来衔接上一页继续来搭建SSM,再提一下大家如果不详细可以再去看视频哦,B站就有 之后我们来配置SpringMVC的配置文件,主要是配置跳转的逻辑 先扫描所有的业务逻辑组件 我们要用SpringMV ...

  6. C# 基础知识系列- 1 数据类型

    常见数据类型 C#的类型一般分为值类型.引用类型两大类型. 值类型的实例存放在栈中,引用类型会在栈中放置一个指针指向堆中的某一块内容. C#为我们内置了几个数据类型供我们使用: 关键词简写 对应的类全 ...

  7. docker-ce 在windows10下使用volume的注意事项

    最近想搭建一套CI/CD环境尝试一下,因为手里云服务太小了(1C1G),撑不起来gitlab和jenkins.恰巧年前配了台高配版的windows机器,就想在家里的机器上通过docker装gitlab ...

  8. 基于java的OpenCV环境搭建

    一.OpenCV下载安装 OpenCV可以在官网下载链接https://opencv.org/releases.html 选择相应的版本下载保存就好(不过官网下载有时候真滴慢还会连不上.....)网盘 ...

  9. oracle数据库表用序列实现主键自增长

    原理注意:序列和触发器必须建立在同一个用户名下否则运行出错1.建立数据表create table 表名(           userid number(10) primary key,        ...

  10. [IROS 2018]Semantic Mapping with Simultaneous Object Detection and Localization

      论文地址:https://arxiv.org/abs/1810.11525   论文视频:https://www.youtube.com/watch?v=W-6ViSlrrZg​www.youtu ...