蓝桥杯2017第八届C语言B组省赛习题题解——习题B.等差素数列

每日刷题(二十)

蓝桥杯第八届C语言B组省赛习题

习题B:等差素数列

在这里插入图片描述
这题直接一点就用暴力枚举法

这里我写了两份上传代码,这些代码便于各位深入分析这个题目,也适合于那些一直没弄懂自己代码问题的朋友们借助我的代码调试从而发现自己问题
第一份C代码

#include<stdio.h>
#include<math.h>
 
int isPrime(int n)
{
	int i;
	if(n == 3)
		return 1; 
	for(i = 2; i <= sqrt(n); i++)
		if(n % i == 0) 
			return 0;
	return 1;

}


int main()
{
	int i = 2, j, d, a[5000], num = 0, account = 0;		
	while(account < 5000)
	{
		if(isPrime(i))
		{
			a[num++] = i;
			account++;
		}
		i++;
	}
//	for(i = 0; i < 5000; i++)
//		printf("%9d", a[i]);
//	printf("\nNow!\n");
	int flag = 1;
	for(i = 0; i < 5000; i++)			//µÚÒ»¸ö 
	{
		if(flag == 0)
			break;
		for(j = 1; j <= 10000; j ++)
		{
			d = a[i] + j;			//µÚ¶þ¸ö 
			if(isPrime(d))
			{
				d += j;				//µÚÈý¸ö 
				if(isPrime(d))
				{
					d += j;			//µÚËĸö 
					if(isPrime(d))
					{
						d += j;			//µÚÎå¸ö 
						if(isPrime(d))
						{
							d += j;			//µÚÁù¸ö 
							if(isPrime(d))
							{
								d += j;			//µÚÆ߸ö 
								if(isPrime(d))
								{
									d += j;			//µÚ°Ë¸ö 
									if(isPrime(d))
									{
										d += j;			//µÚ¾Å¸ö 
										if(isPrime(d))
										{
											d += j;			//µÚÊ®¸ö 
											if(isPrime(d))
//												printf("%d  %d\n",a[i], j);
											{
												printf("%d",j);
												flag = 0;
												break;
												}	
											else
											{
												d = 0;
												continue;
											}
												
										 } 
										 else
										 {
										 	d = 0;
										 	continue;
										 }
										 	
									}
									else
									{
										d = 0;
										continue;
									}
										
								}
								else 
								{
									d = 0;
									continue;
								}
									
							}
							else
							{
								d = 0;
								continue;
							}
								
						}
						else
						{
							d = 0;
							continue;
						}
							
					}
					else 
					{
						d = 0;
						continue;
					}
						
				}
				else
				{
					d = 0;
					continue;
				}
					
			}
			else
			{
				d = 0;
				continue;	
			}
			
		}
	} 
	
} 

第二份代码新鲜出炉

#include<stdio.h>
#include<math.h>
 
int isPrime(int n)
{
	int i;
	if(n == 3)
		return 1; 
	for(i = 2; i <= sqrt(n); i++)
		if(n % i == 0) 
			return 0;
}


int main()
{
	int i = 2, a[5000], num = 0, account = 0;		
	
	while(account < 5000)			//µÃ³ö5000¸öËØÊý 
	{
		if(isPrime(i))
		{
			a[num++] = i;
			account++;
		}
		i++;
	}
	
//	for(i = 0; i < 5000; i++)		//´òÓ¡5000¸öËØÊý 
//		printf("%9d", a[i]);
//		
//	printf("\nNow!\n");
//	
	int j, d = 0, k;
	
	for(i = 0; i < 5000; i++)		
	{
		for(j = 1; j < 1000; j++)
		{
			d = a[i];			//µÚÒ»¸öÊý 
			num = 1;			//numÖØÖÃ 
			for(k = 0; k < 9; k++)			
			{
				
				d += j;
				if(isPrime(d))
				{
					num++;
				}
				else
					break;
			}
			if(num == 10)
			{
				printf("%d",j);
				break;
			}
		}
	} 
	
	
	return 0;
}

通过这个测试代码经过对比可得210是最终答案

#include<stdio.h>
#include<math.h>
 
int isPrime(int n)
{
	int i;
	if(n == 3)
		return 1; 
	for(i = 2; i <= sqrt(n); i++)
		if(n % i == 0) 
			return 0;
	return 1;

}


int main()
{
	int i = 2, j, d, a[5000], num = 0, account = 0;		
	while(account < 5000)
	{
		if(isPrime(i))
		{
			a[num++] = i;
			account++;
		}
		i++;
	}
//	for(i = 0; i < 5000; i++)
//		printf("%9d", a[i]);
//	printf("\nNow!\n");
	int flag = 1;
	for(i = 0; i < 5000; i++)			//µÚÒ»¸ö 
	{
		if(flag == 0)
			break;
		for(j = 1; j <= 10000; j ++)
		{
			d = a[i] + j;			//µÚ¶þ¸ö 
			if(isPrime(d))
			{
				d += j;				//µÚÈý¸ö 
				if(isPrime(d))
				{
					d += j;			//µÚËĸö 
					if(isPrime(d))
					{
						d += j;			//µÚÎå¸ö 
						if(isPrime(d))
						{
							d += j;			//µÚÁù¸ö 
							if(isPrime(d))
							{
								d += j;			//µÚÆ߸ö 
								if(isPrime(d))
								{
									d += j;			//µÚ°Ë¸ö 
									if(isPrime(d))
									{
										d += j;			//µÚ¾Å¸ö 
										if(isPrime(d))
										{
											d += j;			//µÚÊ®¸ö 
											if(isPrime(d))
												printf("%d  %d\n",a[i], j);
//											{
//												printf("%d",j);
//												flag = 0;
//												break;
//												}	
											else
											{
												d = 0;
												continue;
											}
												
										 } 
										 else
										 {
										 	d = 0;
										 	continue;
										 }
										 	
									}
									else
									{
										d = 0;
										continue;
									}
										
								}
								else 
								{
									d = 0;
									continue;
								}
									
							}
							else
							{
								d = 0;
								continue;
							}
								
						}
						else
						{
							d = 0;
							continue;
						}
							
					}
					else 
					{
						d = 0;
						continue;
					}
						
				}
				else
				{
					d = 0;
					continue;
				}
					
			}
			else
			{
				d = 0;
				continue;	
			}
			
		}
	} 
	
} 

结果如下
在这里插入图片描述

所以最小公差就是210

这是目前为止最保姆级的教程,如果喜欢我的文章,请记得三连哦,点赞关注转发,欢迎各位志同道合的IT友人在评论区讨论交流,感谢您的支持,下期更精彩!!!

发布了40 篇原创文章 · 获赞 7 · 访问量 3116

猜你喜欢

转载自blog.csdn.net/qq_44631615/article/details/104562871