AC代码
#include#include using namespace std; typedef long long LL; const int N=1000010; int n,m; int a[N]; int prime[N],cnt,vis[N]; void EulerFilter(){ for(int i=2;i<=N;i++){ if(!vis[i]){ prime[cnt++]=i; } for(int j=0;j N) break; vis[i*prime[j]]=1; if(i%prime[j]==0) break; } } } void work(){ for(int i=0;i =n) sta=2*pr; else if(n%pr!=0) sta=n/pr*pr+pr; for(LL i=sta;i<=m;i+=pr){ a[i-n]=0; } } } void find(){ int maxi=0,maxj=0,max=-1e5; int mini=0,minj=0,min=1e5; int sum=0,end=0; for(LL i=n;i<=m;i++){ if(a[i-n] && i>1){ sum+=1; end=i; } } if(sum<2){ printf("There are no adjacent primes.n"); } else{ for(LL i=end-1;i>=n;i--){ if(a[i-n] && i>1){ int sub=end-i; if(sub>=max){ maxi=i; maxj=end; max=sub; } if(sub<=min){ mini=i; minj=end; min=sub; } end=i; } } printf("%d,%d are closest, %d,%d are most distant.n",mini,minj,maxi,maxj); } } int main(){ EulerFilter(); while(cin>>n>>m){ for(LL i=n;i<=m;i++){ a[i-n]=1; } work(); find(); } return 0; }



