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 ...
随机推荐
- Python - 变量的作用域
变量作用域 Python能够改变变量作用域的代码段是 def . class . lamda. if/elif/else.try/except/finally.for/while 并不能涉及变量作用域 ...
- .tar.xz文件的创建和解压
创建tar.xz文件:只要先 tar cvf xxx.tar xxx/ 这样创建xxx.tar文件先,然后使用 xz -z xxx.tar 来将 xxx.tar压缩成为 xxx.tar.xz 解压ta ...
- Java 锁详解(转)
转自 https://www.cnblogs.com/jyroy/p/11365935.html Java提供了种类丰富的锁,每种锁因其特性的不同,在适当的场景下能够展现出非常高的效率.本文旨在对锁相 ...
- canvas绘制折线图
效果图: 重难点: 1.画布左上角的顶点的坐标为(0 ,0),右下角的坐标最大,与平常思维相反 2.数据的处理 html代码: <!DOCTYPE html><html lang=& ...
- VirtualBox 安装 Centos8 使用 Xshell 连接
1.下载CentOS CentOS下载地址:https://wiki.centos.org/Download 这里选择本地安装包,网络安装包在安装时需要在线下载资源比较慢 2.安装VirtualBox ...
- Linux基本操作 ------ 文件处理命令
显示目录文件 ls //显示当前目录下文件 ls /home //显示home文件夹下文件 ls -a //显示当前目录下所有文件,包括隐藏文件 ls -l //显示当前目录下文件的详细信息 ls - ...
- excel导出功能
/* * 导出 add by faby on 20180918 */ public void export(){ HttpServletResponse response=ServletAct ...
- OpenCV-Python 改变颜色空间 | 十三
目标 在本教程中,你将学习如何将图像从一个色彩空间转换到另一个,像BGR↔灰色,BGR↔HSV等 除此之外,我们还将创建一个应用程序,以提取视频中的彩色对象 你将学习以下功能:cv.cvtColor, ...
- 使用scikit-learn解决文本多分类问题(附python演练)
来源 | TowardsDataScience 译者 | Revolver 在我们的商业世界中,存在着许多需要对文本进行分类的情况.例如,新闻报道通常按主题进行组织; 内容或产品通常需要按类别打上标签 ...
- 好记性-烂笔头:JDK8流操作
1):对象 List<User> 转 Map<String,Object> 案例如下: public class User { private Integer id; priv ...