第八届蓝桥杯真题 02 等差素数列
2017-04-14 21:40
267 查看
题目:
标题:等差素数列
2,3,5,7,11,13,....是素数序列。
类似:7,37,67,97,127,157 这样完全由素数组成的等差数列,叫等差素数数列。
上边的数列公差为30,长度为6。
2004年,格林与华人陶哲轩合作证明了:存在任意长度的素数等差数列。
这是数论领域一项惊人的成果!
有这一理论为基础,请你借助手中的计算机,满怀信心地搜索:
长度为10的等差素数列,其公差最小值是多少?
注意:需要提交的是一个整数,不要填写任何多余的内容和说明文字。
答案:210
解题思路:先将50000以内的素数用打表的方法将素数判断出来,再通过for循环逐个查找符合题意的素数。
代码:
标题:等差素数列
2,3,5,7,11,13,....是素数序列。
类似:7,37,67,97,127,157 这样完全由素数组成的等差数列,叫等差素数数列。
上边的数列公差为30,长度为6。
2004年,格林与华人陶哲轩合作证明了:存在任意长度的素数等差数列。
这是数论领域一项惊人的成果!
有这一理论为基础,请你借助手中的计算机,满怀信心地搜索:
长度为10的等差素数列,其公差最小值是多少?
注意:需要提交的是一个整数,不要填写任何多余的内容和说明文字。
答案:210
解题思路:先将50000以内的素数用打表的方法将素数判断出来,再通过for循环逐个查找符合题意的素数。
代码:
#include <stdio.h> #include <stdlib.h> #include <string.h> int a[50000]; void sushu() { memset(a,1,sizeof(a)); int i,j; a[0]=0; a[1]=0; for(i=2; i<50000; i++) { if(a[i]) { for(j=i+i; j<50000; j+=i) { a[j]=0; } } } } int main() { int flag=0; //标记是否找到最小的一个符合条件的数列 int i,j,k; int x,c; //x 用作存放下一个符合条件的素数,c 用来保存已找到的符合条件的素数数目 sushu(); for(i=2; i<5000; i++) //数列第一项为i { if(!a[i]) continue; else { for(j=1; j<500; j++) //数列公差为j { x=i; c=1; while(1) { x=x+j; if(a[x]) { c++; if(c>=10) { printf("公差=%d\n",j); //输出找的符合题意的公差 for(k=i; k<i+10*j; k+=j) //输出找到符合题意的数列 { printf("%d\t",k); } flag=1; //表示已找到符合题意的数列 break; } } else break; } if(flag) break; } } if(flag) break; } printf("\n"); return 0; }
相关文章推荐
- 第八届蓝桥杯省赛真题 - 2.等差素数列
- 第八届蓝桥杯【省赛试题2】等差素数列
- 第八届蓝桥杯C++B组 等差素数列
- 第八届蓝桥杯第二题等差素数列
- 第八届蓝桥杯省赛B组之等差素数列
- 第八届蓝桥杯C++B组第二题:等差素数列
- 2017河南省B组蓝桥杯真题(1) 等差素数列
- (素数筛)第八届蓝桥杯【省赛试题2】等差素数列
- 2017第八届蓝桥杯C/C++ B组省赛题——等差素数列
- 蓝桥杯第八届--第二题等差素数列
- 第八届蓝桥杯省赛B组c++_等差素数列
- 蓝桥杯第八届等差素数列
- 第八届蓝桥杯_等差素数列_1
- 2017第八届蓝桥杯C++B组省赛之等差素数列题
- 第八届蓝桥杯第二题:等差素数列
- 2017第八届蓝桥杯C/C++B组第二题 等差素数列
- 第八届 蓝桥杯 c/c++ B组 省赛 (2)——等差素数列
- 蓝桥杯第八届(等差素数序列)以及c++的排序与检索
- 第八届蓝桥杯大赛个人赛省赛(软件类)真题
- 第八届蓝桥杯省赛真题 - 3.承压计算