蓝桥杯等差素数列

#include <stdio.h>
#include <string.h>
#include <stdbool.h>
//验证上限
#define maxSize 10000000

bool isPrime[maxSize];//是否是素数
int prime[maxSize];//存素数

int main(void)
{
	/*埃氏筛*/
	int i, j, num;
	memset(isPrime, true, sizeof(isPrime));
	isPrime[0] = isPrime[1] = false;
	for( i = 0, num = 0 ;i < maxSize ;++i )
	{
		if(isPrime[i] == false)
			continue;
			
		prime[num++] = i;
		for( j = 2*i ;j < maxSize ;j+=i )
			isPrime[j] = false;
	}
	
	int d;//公差
	for( d= 1; d < 1000000 ;++d )//遍历公差为1~1000000的情况
	{
		for( i = 0; i<num-10 ; ++i )//遍历每个素数作为首项的情况
		{
			for( j = 0;j < 10 ;++j )//aj遍历a0、a1、a2......a9
			{	//aj是否为素数
				if(isPrime[ prime[i]+d*j ]==false)
					break;
			}
			if(j==10)//10个都是素数
			{
				printf("%d", d);
				return 0;
			}
				
		}
	} 
}

蓝桥杯等差素数列

上一篇:[CTSC2018] 暴力写挂


下一篇:顺序栈和双向顺序栈的操作