第一次编写
/*
第一次编写
2020/3/3
*/
#include<stdio.h>
#include<math.h>
int tmp[3];
int ans[1000000];
int first;
int flag;
int a,b;
int isPrime(int t)
{
int i;
if(t == 0 || t == 1)
return 0;
for(i = 2;i<=(int)sqrt(t);i++)
{
if(t % i == 0)
return 0;
}
return t;
}
int main()
{
int i,j,k;
int d;
int n;
n = 0;
scanf("%d%d",&a,&b);
for(i = a;i<=b;i++)
{
if(isPrime(i)){
//printf("%d ",i);
ans[n++] = i;
}
}
d = (a+b)/2 + 1;
for(i = 1;i<=d;i++)//等差d
{
for(j = 0;j<n;j++)//元素
{
if( ans[j] == ans[j+1] - i && ans[j+1] == ans[j+2]-i)
{
printf("%d %d %d ",ans[j],ans[j+1],ans[j+2]);
j = j+2;
while(ans[j]==ans[j+1] - d)
{
printf("%d ",ans[j+1]);
j++;
}
printf("\n");
}
}
}
return 0;
}
/*
IN:
140 400
OUT:
151 157 163
167 173 179
251 257 263 269
367 373 379
199 211 223
*/
- 注:
for(i = 1;i<=d;i++)//等差d
for(j = 0;j<n;j++)//元素
//得出的答案是按照等差数列的d排序
151 157 163
167 173 179
251 257 263 269
367 373 379
199 211 223
for(j = 0;j < n;j++)//元素
for(i = 1;i<=d;i++)//等差d
//得出的答案是按照等差数列的第一个元素的大小排序
151 157 163
167 173 179
199 211 223
251 257 263 269
367 373 379
第二次编写
发现一些问题:
这样的写法只能够求解出相邻素数的等差数列{3,5,7},是否存在不相邻素数的等差数列(中间隔着其他元素)????
举个栗子:元素并不是都是素数,如{1,7,3,6,5,10}:
按照这种写法得不到{1,3,5}是等差数列
可能题目就是这个意思吧。。。
/*
第二次编写
2020/4/11
*/
#include<stdio.h>
#include<math.h>
#include<string.h>
int primeArr[1000];
int isPrime(int n)
{
if(n == 0 || n == 1) return 0;
for(int i = 2;i<=(int)sqrt(n);i++)
{
if(n%i == 0)
return 0;
}
return 1;
}
int main()
{
int i;
int a,b;
scanf("%d%d",&a,&b);
memset(primeArr,0,sizeof(primeArr));
int n = 0;
for(i = a;i<=b;i++)
{
if(isPrime(i))
{
primeArr[n++] = i;
}
}
int ii,temp_d;
int count;
for(i = 0;i<n; )//将i的判断放在后面
{
ii = i;
temp_d = primeArr[ii+1] - primeArr[i];//不是采用枚举法
count = 1;
while( primeArr[ii] + temp_d == primeArr[ii + 1] )//不必担心primeArr越界
{
count++;
ii++;
}
if(count>=3)
{
int j;
for(j = 0;j<count;j++)
{
if(j == count - 1)
printf("%d\n",primeArr[ii - count + j + 1]);
else
printf("%d ",primeArr[ii - count + j + 1]);
}
i = ii - 1;
}
else
{
i++;
}
}
return 0;
}
//相比于第一次时间复杂度降低很多,不是采用枚举法获得等差
/*
IN:
140 400
OUT:
151 157 163
167 173 179
199 211 223
251 257 263 269
367 373 379
*/