在pl / sql中生成素数

时间:2017-04-10 12:17:04

标签: plsql

请告诉我代码中的问题。我写了这段代码而不能正常工作。告诉我错误或是否有任何其他简单的方法来生成素数直到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;

2 个答案:

答案 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;
 /