算法竞赛---day1(等差素数列)

声明:最近有点小烦躁,学了这么长时间的算法,连个皮毛都不知道掌握了没有,漫无目的的学习,让我自己开始怀疑自己在学习过程中是否走入了低效的陷阱,学以致用,我准备这阵子认真准备20年的蓝桥杯,拿不拿奖无所谓,主要是以赛带动高效学习,嗯。。。就以2017年的真题开始吧!
啧啧啧,这B组第一题是什么鬼??不想做。。。B组第二题,嗯。。。可以可以,那就从这里开始吧:
题目:
2,3,5,7,11,13,…是素数序列。类似:7,37,67,97,127,157 这样完全由素数组成的等差数列,叫等差素数数列。上边的数列公差为30,长度为6。2004年,格林与华人陶哲轩合作证明了:存在任意长度的素数等差数列。这是数论领域一项惊人的成果!有这一理论为基础,请你借助手中的计算机,满怀信心地搜索:长度为10的等差素数列,其公差最小值是多少?
注意:需要提交的是一个整数,不要填写任何多余的内容和说明文字。
分析:
这题我自己做的时候虽然没有完全做对,但和最终结果也比较接近了,卡住我思路的关键是数学。。。
我没有想到用数组来表标记素数;对等差数列的表示,理解也不深刻。。。
公差为30,长度为6。这句话能不能真正理解是解决本题的关键,只有挖掘出了a+i*d,i++才能很好的解决这题。
其实也就是一个高一学的的等差公式。。水平太次了,第二题就JJ了,好好积累吧。。。

//#include<bits/stdc++.h> 
#include<iostream>
#include<cmath>
#define N 100000
using namespace std;
int a[N];
bool isprime(int x){
	if(x<2){
		return false;
	}
	for(int i=2;i<sqrt(x);i++){
		if(x%i==0){
			return false; 
		}
	}
	return true;
}
int main(){
	int i,len,d;
	for(int i=2;i<N;i++){
		if(isprime(i)){
			a[i]=1;
		}
	}
	for(d=1;d<N;d++){
		for(i=2;i<N;i++){
			for(len=0;len<10;len++){
				if(a[i+d*len]!=1){
					break;
				}
			}
			if(len==10){
				cout<<d;
				return 0;
			}
		}
	}
	return 0;
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值