您的位置:首页 > 其它

prime

2016-03-06 21:34 267 查看
#include<iostream>
#include<string.h>
using namespace std;
const int MAX=10000000;
bool visit[MAX];
int prime[670000];
int num=0;
void getprime()
{
memset(visit,true,sizeof(visit));
visit[1]=false;
long long int i,j;
for(i=2;i<=MAX;i++)
if(visit[i])
{
num++;
prime[num]=i;
for(j=i*i;j<=MAX;j+=i)
visit[j]=false;
}
}
int main()
{
getprime();
cout<<num;
}


线性筛,还有注意区间。poj2689

#include<stdio.h>
#include<string.h>
const int n=50000;
int prime
,num=0;
bool p[1000100];
bool visit
;
void getprime()
{
memset(visit,true,sizeof(visit));
int i,j;
for(i=2;i<=n;i++)
{
if(visit[i]) prime[num++]=i;
for(j=0;j<num;j++)
{
if(i*prime[j]>n) break;
visit[i*prime[j]]=false;
if(i%prime[j]==0) break;
}
}
}
int main()
{
getprime();
int r,l,i,j,s,t,d;
while(scanf("%d%d",&l,&r)!=EOF)
{
memset(p,true,sizeof(p));
if(l==1) l++;
for(i=0;i<num;i++)
{
s=(l-1)/prime[i]+1;
t=r/prime[i];
for(j=s;j<=t;j++)
if(j>1) p[j*prime[i]-l]=false;
}
int mina=0,minb=0x7fffffff,maxa=0,maxb=0;
for(i=0;i<=r-l;i++)
if(p[i])
{
d=i;
break;
}
for(i=d+1;i<=r-l;i++)
if(p[i])
{
if(i-d>maxb-maxa)
{
maxb=i;
maxa=d;
}
if(i-d<minb-mina)
{
minb=i;
mina=d;
}
d=i;
}
mina+=l;
minb+=l;
maxa+=l;
maxb+=l;
if(maxb!=l) printf("%d,%d are closest, %d,%d are most distant.\n",mina,minb,maxa,maxb);
else printf("There are no adjacent primes.\n");
}
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: