定两个整数 L,R , 求闭区间 [L,R] 中相邻两个质数差值最小的数对与差值最大的数对。
当存在多个时,输出靠前的素数对。
筛 1e6
每个素数,在区间里标记倍数,
类似的还有 https://www.luogu.com.cn/problem/P1835
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 | #include<iostream> #include <algorithm> #include <cstring> using namespace std; const int M=1e6+10; #define int long long int P[M],fac[M],tot; int b[M]; int bin[M],B; void init( int top){ int i,j; for (i=2;i<=top;i++) P[i]=1; P[0]=P[1]=0; for (i=2;i<=top;i++){ if (P[i]==0) continue ; fac[++tot]=i; for (j=i*2;j<=top;j+=i) P[j]=0; } } int L,R; void sov(){ int i,j; memset (b,0, sizeof b); if (L==1){ b[0]=1; } for (i=1;i<=tot;i++){ for (j=L/fac[i];j<=R/fac[i];j++) if (j>1) b[j*fac[i]-L]=1; } B=0; for (i=L;i<=R;i++) if (b[i-L]==0) bin[++B]=i; int t1=2147483647,t2=0; int x1,y1,x2,y2; for (i=1;i<B;i++){ int t =bin[i+1]-bin[i]; if (t1>t){ x1=bin[i],y1=bin[i+1],t1=t; } if (t2<t){ x2=bin[i],y2=bin[i+1],t2=t; } } if (t2==0) printf ( "There are no adjacent primes.\n" ); else printf ( "%d,%d are closest, %d,%d are most distant.\n" , x1,y1,x2,y2); } signed main(){ init(6e4); while (cin>>L>>R) sov(); } |
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 阿里最新开源QwQ-32B,效果媲美deepseek-r1满血版,部署成本又又又降低了!
· 单线程的Redis速度为什么快?
· SQL Server 2025 AI相关能力初探
· AI编程工具终极对决:字节Trae VS Cursor,谁才是开发者新宠?
· 展开说说关于C#中ORM框架的用法!