#include <bits/stdc++.h> using namespace std; const int N = 1000010, M = 5000010; int v[M]; long long prime[N],prim[N]; int cun=0; int inint(int n) { for(int i=2;i<=n;i++) { if(!v[i]) { v[i]=i; prim[cun++]=i; } for(int j=0;j<cun;j++) { if(prim[j]>n/i||prim[j]>v[i])break; v[i*prim[j]]= prim[j]; } } } int main() { long long l, r; inint(1000010); while(cin >> l>> r) { memset(v,0,sizeof(v)); for(int i=0;i<cun;i++) { long long p=prim[i]; for(long long j = max(2*p,(l+p-1)/p*p);j<=r;j+=p) { v[j-l]=1; } } cun =0; for(int i= 0;i<=r-l;i++) { if(v[i]==0&&i+l>1)prime[cun++] = i; } if(cun <2) { cout <<"There are no adjacent primes."<<endl; } else{ int mind=0,maxd=0; for(int i=0;i+1<cun;i++) { int d = prime[i+1] - prime[i]; if(d>prime[maxd+1]-prime[maxd])maxd=i; if(d<prime[mind+1]-prime[mind])mind = i; } printf("%d,%d are closest, %d,%d are most distant.\n",prime[mind]+l,prime[mind+1]+l,prime[maxd]+l,prime[maxd+1]+l); } } return 0; }
本文来自博客园,作者:键盘侠牧师,转载请注明原文链接:https://www.cnblogs.com/wangzhe52xia/p/11377550.html