zoukankan      html  css  js  c++  java
  • POJ

    题意:求[L,R]中差值最小和最大的相邻素数(区间长度不超过1e6)。

    由于非素数$n$必然能被一个不超过$sqrt n$的素数筛掉,因此首先筛出$[1,sqrt R]$中的全部素数,然后用这些素数去筛$[L,R]$。

    注意1不是素数,但不会被筛掉,需要特殊处理(巨坑~~)

     1 #include<cstdio>
     2 #include<algorithm>
     3 using namespace std;
     4 typedef long long ll;
     5 const ll N=1e5+10,inf=0x3f3f3f3f;
     6 ll L,R,isp1[N],isp2[N*10],pri[N*10],npri;
     7 void getpri1() {
     8     for(ll i=2; i<N; ++i)isp1[i]=1;
     9     for(ll i=2; i<N; ++i)if(isp1[i])for(ll j=2; i*j<N; ++j)isp1[i*j]=0;
    10 }
    11 void getpri2() {
    12     for(ll i=0; i<=R-L; ++i)isp2[i]=1;
    13     for(ll i=2; i*i<=R; ++i)if(isp1[i])
    14             for(ll j=max(2ll,(L-1)/i+1); i*j<=R; ++j)isp2[i*j-L]=0;
    15 }
    16 int main() {
    17     getpri1();
    18     while(scanf("%lld%lld",&L,&R)==2) {
    19         getpri2();
    20         npri=0;
    21         for(ll i=L; i<=R; ++i)if(isp2[i-L]&&i!=1)pri[npri++]=i;
    22         if(npri<2)puts("There are no adjacent primes.");
    23         else {
    24             ll mi=1,mx=1;
    25             for(ll i=2; i<npri; ++i) {
    26                 if(pri[i]-pri[i-1]<pri[mi]-pri[mi-1])mi=i;
    27                 if(pri[i]-pri[i-1]>pri[mx]-pri[mx-1])mx=i;
    28             }
    29             printf("%lld,%lld are closest, %lld,%lld are most distant.
    ",pri[mi-1],pri[mi],pri[mx-1],pri[mx]);
    30         }
    31     }
    32     return 0;
    33 }
  • 相关阅读:
    第十周课程总结
    第九周课程总结&实验报告(七)
    第八周课程总结和实验报告
    第六周作业
    第五周课程总结和实验报告
    第四周课程总结和实验报告
    课程总结
    第十四周
    第十三周学习总结
    第十二周总结
  • 原文地址:https://www.cnblogs.com/asdfsag/p/11270818.html
Copyright © 2011-2022 走看看