问题标题: 1575 质数

1
0
已解决
高亮节
高亮节
资深守护
资深守护

代码超时了:

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
臧启亚
臧启亚
初级光能
初级光能

具体思路:

先从L到R一个循环,判断循环里的每一个数是否为质数。若是,就与存储的最小值和最大值进行比较。最后输出

0
杨陈卓
杨陈卓
新手天翼
新手天翼

这是初中要学到的内容

0
我要回答