每日刷题(二十)
蓝桥杯第八届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