2017蓝桥杯等差素数(C++B组)
题目 : 等差素数列
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组)的更多相关文章
- 2017蓝桥杯九宫幻方(C++B组)
题目:九宫幻方 小明最近在教邻居家的小朋友小学奥数,而最近正好讲述到了三阶幻方这个部分,三阶幻方指的是将1~9不重复的填入一个3*3的矩阵当中,使得每一行.每一列和每一条对角线的和都是相同的. ...
- 2017蓝桥杯贪吃蛇(C++C组)
原题: 贪吃蛇长度+-------------------------------------------------+| ...
- 2013第四届蓝桥杯决赛Java高职高专组题目以及解法答案
2013第四届蓝桥杯决赛Java高职高专组题目以及解法答案 不知不觉离决赛都过去一个月了,一直忙于各种事情,都忘记整理一份试题.当作回忆也好. 1. 标题:好好学习 汤姆跟爷爷来中国旅游.一天,他帮助 ...
- 2021蓝桥杯省赛C++A组试题E 回路计数 状态压缩DP详细版
2021蓝桥杯省赛C++A组试题E 回路计数 状态压缩DP 题目描述 蓝桥学院由21栋教学楼组成,教学楼编号1到21.对于两栋教学楼a和b,当a和b互质时,a和b之间有一条走廊直接相连,两个方向皆可通 ...
- 2017第八届蓝桥杯C/C++语言A组
一:题目: 标题:迷宫 X星球的一处迷宫游乐场建在某个小山坡上.它是由10x10相互连通的小房间组成的. 房间的地板上写着一个很大的字母.我们假设玩家是面朝上坡的方向站立,则:L表示走到左边的房间,R ...
- 2017蓝桥杯省赛C/C++B(补题中)
标题:等差素数列 2,3,5,7,11,13,....是素数序列. 类似:7,37,67,97,127,157 这样完全由素数组成的等差数列,叫等差素数数列. 上边的数列公差为30,长度为6. 200 ...
- 2016第七届蓝桥杯C/C++语言A组
一:问题: 某君新认识一网友.当问及年龄时,他的网友说:“我的年龄是个2位数,我比儿子大27岁,如果把我的年龄的两位数字交换位置,刚好就是我儿子的年龄” 请你计算:网友的年龄一共有多少种可能情况? 提 ...
- 2018第九届蓝桥杯决赛(C++ B组)
逛了大半个北京还是挺好玩de 第一题 标题:换零钞 x星球的钞票的面额只有:100元,5元,2元,1元,共4种. 小明去x星旅游,他手里只有2张100元的x星币,太不方便,恰好路过x星银行就去换零钱. ...
- 蓝桥杯 2014本科C++ B组 奇怪的分式 暴力枚举
蓝桥杯 枚举 奇怪的分式 标题:奇怪的分式 上小学的时候,小明经常自己发明新算法.一次,老师出的题目是: 1/4 乘以 8/5 小明居然把分子拼接在一起,分母拼接在一起,答案是:18/45 (参见图1 ...
随机推荐
- throttle工具函数
// fn是我们需要包装的事件回调, delay是时间间隔的阈值 export function throttle(fn, delay) { // last为上一次触发回调的时间, timer是定时器 ...
- git基础教程(八)
8. gitlab相关介绍 8.1 gitlab优势 社区版本,自己可以在公司搭建环境 维护人员多,版本更新块 易用性强,上手快 集成CI(持续集成) 集成CD(持续发布) 8.2 持续集成 8.2. ...
- 机器学习实战 [Machine learning in action]
内容简介 机器学习是人工智能研究领域中一个极其重要的研究方向,在现今的大数据时代背景下,捕获数据并从中萃取有价值的信息或模式,成为各行业求生存.谋发展的决定性手段,这使得这一过去为分析师和数学家所专属 ...
- token iviewAdmin + php 登录验证解决方案
思路: php 开启 Session 登录时 生成token,前端存下,然后每次走接口 验证下Session里的token和前端发过来的token是否一样. 遇到问题:后端 每次PHP Session ...
- 附014.Kubernetes Prometheus+Grafana+EFK+Kibana+Glusterfs整合性方案
一 glusterfs存储集群部署 注意:以下为简略步骤,详情参考<附009.Kubernetes永久存储之GlusterFS独立部署>. 1.1 架构示意 略 1.2 相关规划 主机 I ...
- Collection-接口中的方法(新手)
/* Collection 接口中的方法 ArrayList implements List 数组列表 实现 列表 List extends Collection 列表 继承 数组列表*///导入包. ...
- video.js 视频自动全屏播放
1.头部引用脚本 <link href="css/video-js.min.css" rel="stylesheet"> <link href ...
- VS code调试代码快速上手必备知识
一.通过简单的配置运行一个JavaScript程序 1.打开(创建)一个新的工作空间(文件夹),并创建一个js文件: var name='world'; var s='Hello,${name}!'; ...
- 动态规划-01背包-Tallest Billboard
2020-02-07 17:46:32 问题描述: 问题求解: 解法一:BF 看问题规模看似可以直接暴力解决. 如果直接去解肯定是会超时的,因为每次将原空间划分成A区域,B区域和剩余区域的时间复杂度为 ...
- [kmp,不要过多调用strlen!!!] Codeforces 1200E Compress Words
题目:http://codeforces.com/contest/1200/problem/E Compress Words time limit per test 1 second memory l ...