poj——2689(数论之素数筛法)

题目地址:http://poj.org/problem?id=2689

解析:直接把sqrt(22*10e8)以内的素数筛选出并保存下来,然后对L——u内的数进行筛选,剩下的就是素数了。

#include 
#include 
#include 
#include 
#include 
#include 
using namespace std;
typedef long long ll;
#define INF 0x7fffffff
#define MAX(a,b) a>b?a:b
#define MIN(a,b) a>b?b:a
#define N 101
int flag[50000];
ll prime[10000];
ll sign[1000005];
int q=0;
void init()
{
    ll i,j;
	for(i=2;i*i<=50000;i++)
	 {
 		if(flag[i]) continue; 
 		prime[q++]=i;
 		for(j=i*i;j<50000;j+=i)
 		 flag[j]=1;
 	}
 	for(i;i<50000;i++) 
 	  if(!flag[i]) prime[q++]=i;
}
ll g[200000];
int main()
{
	ll i,j,k,t;
	ll m,n;
	ll a,b;  
	ll p;
	init();
	while(cin>>a>>b)
	 {
	 	memset(sign,0,sizeof(sign));
	 	p=0;	 	
 		for(j=0;j=a) sign[l-a]=1;
		   } 
		   }
                if(a==1) sign[0]=1;   //1的特殊情况
	 	for(i=a;i<=b;i++)
	 	{
	 		if(!sign[i-a]) g[p++]=i;
	 	}
	 	if(p<=1) 
		 {
		 cout<<"There are no adjacent primes."<mid) 
			   {
			   Min=mid;
			   stx=g[i-1];
			   sty=g[i];
			   }
  	 	    if(Max




你可能感兴趣的:(ACM数论+数学,POJ)