请告诉我代码中的问题。我写了这段代码而不能正常工作。告诉我错误或是否有任何其他简单的方法来生成素数直到1000。
declare
i number;
prime number;
j number;
begin
for i in 2 .. 1000 loop
prime := 0;
for j in 2 .. i/2 loop
if mod(i,j)=0 then prime := 1
end if;
end loop;
if prime = 0 then dbms_output.put_line(i||'&');
end if;
end loop;
end;
答案 0 :(得分:1)
你已经有了答案(缺少分号),但只是为了好玩:
i
变量。j
会更有效pls_integer
(因为i
是隐含的)。可能甚至是simple_integer
,但是您需要重新构建循环以使i
成为simple_integer
,并且它对于这一小部分来说几乎不值得如果编译器还没有优化它,你可能会得到一秒钟。prime
作为布尔值更具可读性。end loop
与其开头loop
声明对齐。&
附加到每一行输出。这给了我:
declare
j pls_integer;
prime boolean;
begin
for i in 2 .. 1000 loop
prime := true;
for j in 2 .. i/2 loop
if mod(i,j) = 0 then
prime := false;
exit;
end if;
end loop;
if prime then
dbms_output.put_line(i);
end if;
end loop;
end;
答案 1 :(得分:0)
您错过了一个分号,并尝试将设置服务器输出置于运行状态
set serveroutput on
declare
i number;
prime number;
j number;
begin
for i in 2 .. 1000 loop
prime := 0;
for j in 2 .. i/2 loop
if mod(i,j)=0 then prime := 1;
end if;
end loop;
if prime = 0 then dbms_output.put_line(i||'&');
end if;
end loop;
end;
/