您的位置:首页 > 其它

joj 1928

2012-02-14 17:05 218 查看
筛选法求素数~~~~~

#include <iostream>
#include <stdio.h>
#include <string.h>
#include <math.h>
using namespace std;
int prim[50000];
int main()
{
memset(prim,0,sizeof(prim));
int i;
for(i=2;i<50000;i++)
{
if(prim[i]==0)
{
int j;
for(j=i+i;j<50000;j+=i)
{
prim[j]=1;
}
}
}
int x1,x2;
while(scanf("%d%d",&x1,&x2)!=EOF)
{
if(x1<2)
{
x1=2;
}
int number[x2-x1+10];
memset(number,0,sizeof(number));
int i;
for(i=2;i<sqrt(x2)+1;i++)
{
if(prim[i]==0)
{
int j;
if((x1/i)*i==x1)
{
j=0;
}
else
{
j=(x1/i)*i+i-x1;
}
if(j+x1==i)
{
j+=i;
}
for(;j<=x2-x1;j+=i)
{
number[j]=1;
}
}
}
int j;
j=0;
int r,l;
int now,max=0,min=10000000;
while(number[j]!=0)
{
j++;
}
int b1=-1,b2=-1,c1=-1,c2=-1;
now=j;
j++;
for(;j<=x2-x1;j++)
{
if(number[j]==0)
{
if(j-now>max)
{
max=j-now;
b1=now+x1;
b2=j+x1;
}
if(j-now<min)
{
min=j-now;
c1=now+x1;
c2=j+x1;
}
now=j;
}
}
if(b1==-1)
{
printf("There are no adjacent primes.\n");
}
else
{
printf("%d,%d are closest, %d,%d are most distant.\n",c1,c2,b1,b2);
}
}
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: