196. 质数距离

Posted liulex

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了196. 质数距离相关的知识,希望对你有一定的参考价值。

196. 质数距离

素数筛,由于L,R范围过大

没法一次全筛出来,先线性筛筛出1-1e5范围内的素数

然后埃氏筛筛出L,R范围内的质数

能用数组

不要用unordered_map

#include<bits/stdc++.h>
using namespace std;
#define int  long long
#define si signed
#define sc(x) scanf("%lld",&x);
#define maxn 50000+10
int P[maxn];
bool vis[maxn];
bool f[1000000+10];
int tot;
//unordered_map<int,si> mp;
int L,R;
void init()

    vis[1]=1;
    for(int i=2; i<maxn; i++)
    
        if(!vis[i])
        
            P[tot++]=i;
        
        for(int j=0; i*P[j]<maxn&&j<tot; j++)
        
            vis[i*P[j]]=1;
            if(i%P[j]==0)
            
                break;
            
        
    


void work()


    for(int i=0; P[i]*P[i]<=R&&i<tot; i++)
    
        int s=max(P[i],L/P[i]);
       // cout<<i<<endl;
        if(s*P[i]<L)s++;
        for(; s*P[i]<=R; s++)
        
           // cout<<s<<endl;
            f[s*P[i]-L]=1;
        
    


si main()

    init();

    while(scanf("%lld%lld",&L,&R)!=EOF)
    

        int ma=0,mi=1e10;
        int a=-1,b=-1,c;
        int c1=-1,c2,d1=-1,d2;
        memset(f,0,sizeof f);

        work();

        for(int i=L; i<=R; i++)
        

            if(i!=1&&(!f[i-L]))

            
                if(a==-1)
                
                    a=i;
                
                else
                
                    b=a;
                    a=i;
                    if(a-b>ma)
                    
                        ma=a-b;
                        d1=b;
                        d2=a;
                    
                    if(a-b<mi)
                    
                        mi=a-b;
                        c1=b;
                        c2=a;
                    
                
            

        
        if(c1==-1)
        
            puts("There are no adjacent primes.");
        
        else
        
            printf("%lld,%lld are closest, %lld,%lld are most distant.\n",c1,c2,d1,d2);
        
    

 

以上是关于196. 质数距离的主要内容,如果未能解决你的问题,请参考以下文章

AcWing 196. 质数距离 二次筛法

acwing提高课数学模板

第五章 数学知识

质数距离(筛素数)

Prime triplets (Project Euler 196)

0x31 prime distance(质数)