设2000以内的素数序列(从小到大)为:
x1,x2,...
编一个程序,求如下序列:
y1,y2,......
其中,yi=x(i+1)-xi
ljt985
解题思路:
素数筛打表,逐项求差并输出
(该来的还是来了,背吧。。。)
#include<stdio.h>
#include<string.h>
#define MAXX 1000//求MAXX范围内的素数
int prime[MAXX+5],len=0;
int p[MAXX+5];//p设为bool型较为合适,但int结果也对,注意把p数组加大一点防止越界
//思想:将范围内的合数全部筛掉剩余的就是素数
//而每个合数都可以表示为素数的倍数
void isp()
{
memset(p,1,sizeof(p));//初始都当作素数,这里的1对于int型来说并不是1(bool型才是1)
p[0]=0;p[1]=0;
for(int i=0;i<=MAXX;i++)
{
if(p[i])//经过前面的筛选,没有被筛选掉就是素数
{
for(int j=i;i*j<=MAXX;j++)//i之前的已由上几次循环处理过了
{
p[i*j]=0;//素数的倍数即是合数,筛掉
}
prime[len++]=i;//记录素数
}
}
}
int main()
{
isp();
for(int i=0;i<len;i++)
{
printf("%d ",prime[i]);
}
return 0;
}
本题代码如下:
#include<stdio.h>
#include<string.h>
#define MAXX 2000
int prime[MAXX+5],len=0;
int p[MAXX+5];
void isp()
{
memset(p,1,sizeof(p));
p[0]=0;p[1]=0;
for(int i=0;i<=MAXX;i++)
{
if(p[i])
{
for(int j=i;i*j<=MAXX;j++)
{
p[i*j]=0;
}
prime[len++]=i;
}
}
}
int main()
{
isp();
// for(int i=0;i<len;i++)
// {
// printf("%d ",prime[i]);
// }
for(int i=0;i<len-1;i++)
{
printf("%d ",prime[i+1]-prime[i]);
}
return 0;
}