zoukankan      html  css  js  c++  java
  • AW196 质数距离

    题目地址


    毒瘤点:

    • primeCnt必须放到一个玄学的位置。如果放到上面,评测的时候就会报错.

    易错点:

    • INF必须开到2147483647而不是1<<30.
    • 需要对质数判定有着纵深的理解.

    #include<cstdio>
    #include<iostream>
    #include<cstring>
    #include<cmath>
    using namespace std;
    const int MAXN=1000001,INF=2147483647;
    int primes[MAXN];
    bool notPrime[MAXN];
    int primeCnt=0;
    void initPrime(){
    	for(int i=2;i<=sqrt(INF);i++){
    		if(notPrime[i])continue;
    		primes[++primeCnt]=i;
    		for(int j=2;j<=sqrt(INF)/i;j++){
    			notPrime[i*j]=1;
    		}		
    	}
    }
    int newPrimes[MAXN];
    int main(){
    	initPrime();
    	int l,r;
    	while(cin>>l>>r){
    		memset(notPrime,0,sizeof(notPrime));
    		if(l==1)notPrime[0]=1;
    		for(int i=1;i<=primeCnt;i++){
    			for(int j=l/primes[i];j<=r/primes[i];j++){
    				if(j>1)notPrime[primes[i]*j-l]=1;
    			}
    		}
    		int newPrimeCnt=0;
    		for(int i=l;i<=r;i++){
    			if(!notPrime[i-l])newPrimes[++newPrimeCnt]=i;
    			if(i==r)break;
    		}
    		int minDelta=INF,maxDelta=0;
    		int minX1,minX2,maxX1,maxX2;
    		for(int i=1;i<newPrimeCnt;i++){
    			int nowDelta=newPrimes[i+1]-newPrimes[i];
    			if(nowDelta<minDelta){
    				minDelta=nowDelta;
    				minX1=newPrimes[i],minX2=newPrimes[i+1];
    			}
    			if(nowDelta>maxDelta){
    				maxDelta=nowDelta;
    				maxX1=newPrimes[i],maxX2=newPrimes[i+1];
    			}
    		}
    		if(minDelta==INF)printf("There are no adjacent primes.
    ");//
    		else printf("%d,%d are closest, %d,%d are most distant.
    ",minX1,minX2,maxX1,maxX2);
    	}
    	return 0;
    }
  • 相关阅读:
    cavans笔记
    input心得
    杂乱的笔记
    CSS学习目录
    CSS3四个自适应关键字——fill-available、max-content、min-content、fit-content
    闭包
    0..0 小白
    Scrum
    Git与GitHub
    博客1
  • 原文地址:https://www.cnblogs.com/zbsy-wwx/p/11680529.html
Copyright © 2011-2022 走看看