1
已解决
高亮节
资深守护
资深守护
代码超时了:
uses math;
var
n:array[1..5000000] of longint;
a,b,x,y,z,max:longint;
function su(n:longint):boolean;
var
ii:longint;
begin
su:=true;
for ii:=2 to n-1 do
if n mod ii=0 then su:=false;
end;
begin
read(a,b); y:=0;
for x:=a to b do
if su(x)=true then begin y:=y+1; n[y]:=x; end;
z:=999999999; max:=maxvalue(n);
for x:=1 to y do
if z>n[x] then z:=n[x];
writeln(z,' ',max);
end.
0
已采纳
樊澄宇
新手光能
新手光能
首先,函数中的
for ii:=2 to n-1 do
改为
for ii:=2 to trunc(sqrt(n)) do
素数枚举不能把所有的数试一遍
找最小素数从a开始,将第一个素数输出,退出循环:
for x:=a to b do
begin
if su(x) then
begin
write(x,' ');
break;
end.
end.
找最大素数从b开始,将第一个素数输出,退出循环:
for x:=b downto a do
begin
if su(x) then
begin
writeln(x);
break;
end.
end.
y,z,max和n数组都不需要
不会超时
如有帮助请采纳,谢谢
2
陆麟瑞
资深天翼
资深天翼
普通的暴力枚举不会超时的。
bool pd(int n) { if(n<2) return false; for(int i=2; i<=(int)(sqrt(n)); i++) if(n%i==0) return false; return true; } int main() { int l,r; cin>>l>>r; while(!pd(l++)) { } cout<<l-1<<' '; while(!pd(r--)) { } cout<<r+1;
1
0
0
王祥润
新手守护
新手守护
bool pd(int n)
{
if(n<2) return false;
for(int i=2; i<=(int)(sqrt(n)); i++)
if(n%i==0) return false;
return true;
}
int main()
{
int l,r;
cin>>l>>r;
while(!pd(l++))
{
}
cout<<l-1<<' ';
while(!pd(r--))
{
}
cout<<r+1;
0
0
0
0
0