POJ2689 Prime Distance

區間質數轉換成區間和數的問題,看到區間只有1e6,所以任務是刪去這個區間內所有合數。 

每一個合數n最小質因子不會超過\sqrt{n}

首先篩出\sqrt{R} (1e5)的所有質數,用他們去篩L到R的所有合數即可。

#include <iostream>
#include <iostream>
#include <cstring>
#include <cmath>
#define ms(a,b) memset(a,b,sizeof(a))
#define INF 0x3f3f3f3f
#define LL long long
using namespace std;
const int N=1e6+10;
LL l,r,pri[N],x[N];
bool vis[N];
void prime()
{
    ms(vis,0);
    pri[0]=0;
    for(LL i=2;i<=1e5;i++)
    {
        if(!vis[i])
            pri[++pri[0]]=i;
        for(LL j=1;j<=pri[0]&&pri[j]*i<=1e5;j++)
        {
            vis[pri[j]*i]=1;
            if(i%pri[j]==0)
                break;
        }
    }
    // for(int i=1;i<=pri[0];i++)  
    //     cout<<pri[i]<<endl;
}
int main()
{
    prime();
    while(cin>>l>>r)
    {
        for(LL i=l,p=0;i<=r;i++,p++)
            x[p]=0;
        for(LL i=1;i<=pri[0]&&pri[i]*pri[i]<=r;i++)
            for(LL j=ceil(l/pri[i]);pri[i]*j<=r;j++)
                if(j==1) continue;
                else x[pri[i]*j-l]=1;
        LL maxdis=-1,mindis=INF,pre=-1,maxpos,minpos;
        if(l==1)
            x[0]=1;
        for(LL i=l,p=0;i<=r;i++,p++)
        {
            if(!x[p])
            {
                if(pre==-1)
                    pre=p;
                else
                {
                    if(p-pre>maxdis)
                    {
                        maxdis=p-pre;
                        maxpos=pre;
                    }
                    if(p-pre<mindis)
                    {
                        mindis=p-pre;
                        minpos=pre;
                    }
                    pre=p;
                }
            }
        }
        if(maxdis==-1)
            cout<<"There are no adjacent primes."<<endl;
        else
            cout<<minpos+l<<","<<minpos+l+mindis<<" are closest, "<<maxpos+l<<","<<maxpos+l+maxdis<<" are most distant."<<endl;
        
    }
}

int最大是2^31-1

maxn=(1<<31)-1,sqrt(maxn)會報錯

運算過程中兩個數都是int,相乘溢出後結果不能保證,最好設置成LL

發佈了74 篇原創文章 · 獲贊 4 · 訪問量 5060
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章