zoukankan      html  css  js  c++  java
  • UVA10140 Prime Distance

    题目

    UVA10140 Prime Distance

    分析

    区间筛模板。

    首先如果我们想要知道一个数是不是质数,只需要判断其能不能被 (sqrt{V}) 范围内的任意一个数整除即可。

    而这里我们要求一个 (10^6) 级别的区间,不能一个一个判掉,那么我们可以借用筛法的“标记”的办法,直接将 (sqrt{V}) 范围内的数拿来标记这段区间里面的数,也就相当于筛出这段区间里的质数。

    然后就结束了。

    代码

    #include<bits/stdc++.h>
    using namespace std;
    template <typename T>
    inline void read(T &x){
    	x=0;char ch=getchar();bool f=false;
    	while(!isdigit(ch)){if(ch=='-'){f=true;}ch=getchar();}
    	while(isdigit(ch)){x=(x<<1)+(x<<3)+(ch^48);ch=getchar();}
    	x=f?-x:x;
    	return ;
    }
    template <typename T>
    inline void write(T x){
    	if(x<0) putchar('-'),x=-x;
    	if(x>9) write(x/10);
    	putchar(x%10^48);
    	return ;
    }
    #define ll long long
    #define ull unsigned long long
    #define inc(x,y,mod) (((x)+(y))>=(mod)?(x)+(y)-(mod):(x)+(y))
    #define dec(x,y,mod) ((x)-(y)<0?(x)-(y)+(mod):(x)-(y))
    #define rep(i,x,y) for(int i=(x);i<=(y);i++)
    #define dep(i,y,x) for(int i=(y);i>=(x);i--)
    const int N=2e6+5,NM=62,M=2e5+5,INF=1e9+7;
    int n,m;
    int cnt,prime[N];
    bool vis[N];
    void GetPrimes(){
    	for(int i=2;i<=n;i++){
    		if(!vis[i]) prime[++cnt]=i;
    		for(int j=1;prime[j]*i<=n&&j<=cnt;j++){
    			vis[i*prime[j]]=true;
    			if(i%prime[j]==0) break;
    		}
    	}
    	return ;
    }
    bool vi[N];
    signed main(){
    	
    	int l,r;
    	n=1e5;
    	GetPrimes();
    	while(~scanf("%d%d",&l,&r)){
    		for(int i=0;i<=r-l;i++) vi[i]=false;
    		if(l==1) vi[0]=true;
    		for(int i=1;prime[i]<=sqrt(r);i++){
    			for(int j=max(2,(int)ceil(1.0*l/prime[i]));j<=(int)floor(1.0*r/prime[i]);j++){
    				vi[prime[i]*j-l]=true;
    			}
    		}
    		int las=-1,Maxn=-INF,Minn=INF,t[5];
    		for(int i=0;i<=r-l;i++){
    			if(!vi[i]){
    				if(las!=-1){
    					if(Maxn<i-las) t[3]=las+l,t[4]=i+l,Maxn=i-las;
    					if(Minn>i-las) t[1]=las+l,t[2]=i+l,Minn=i-las;
    				}
    				las=i;
    			}
    		}
    		if(Maxn!=-INF) printf("%d,%d are closest, %d,%d are most distant.
    ",t[1],t[2],t[3],t[4]);
    		else puts("There are no adjacent primes.");
    	}
    	return 0;
    }
    
    
  • 相关阅读:
    【EmguCv】人脸/人眼检测
    iOS 9下Universal Link(通用链接)开发
    【JavaWeb】SpringMvc返回json
    【nlp】湖北师范大学贴吧帖子标题词频统计
    【C#】EAN-13条形码生成与识别
    【C#】身份证识别(三):身份证信息识别
    【C#】身份证识别(二):提取目标区域图像
    米勒罗宾素性测试算法简介+模板(转)
    CodeForces
    CodeForces
  • 原文地址:https://www.cnblogs.com/Akmaey/p/15168802.html
Copyright © 2011-2022 走看看