一道不算太难但是很经典的东西。 好像PKU上也有一道类似的prime distance吧!用的是两次筛法,直接贴代码! program prime1; var f:array[0..1000000] of boolean; list:array[0..5000] of longint; a,b,sum,t,i:longint; function getmax(a,b:longint):longint; begin if a>b then exit(a); exit(b); end; procedure main; var i,j,k:longint; begin readln(a,b); fillchar(f,sizeof(f),1); for k:=1 to sum do begin i:=list[k]; j:=getmax(i*i,(a div i+ord(a mod i<>0))*i); while j<=b do begin f[j-a]:=false; inc(j,i); end; end; if a=1 then f[0]:=false; for i:=0 to b-a do if f[i] then writeln(a+i); writeln; end; procedure getprime; var i,j:longint; begin fillchar(f,sizeof(f),1); for i:=2 to 180 do if f[i] then begin j:=i*i; while j<=32000 do begin f[j]:=false; inc(j,i); end; end; for i:=2 to 32000 do if f[i] then begin inc(sum); list[sum]:=i; end; end; begin assign(input,'a.in'); reset(input); assign(output,'a.out'); rewrite(output); getprime; readln(t); for i:=1 to t do main; close(input); close(output); end.