判断一个数是素数

解决方案 »

  1.   


    --自己去琢磨下
    SQL> edi
    已写入 file afiedt.buf  1  CREATE OR REPLACE FUNCTION sushu(n in int)
      2   return boolean
      3   is
      4   shum boolean;
      5   flag boolean;
      6   j int;
      7   begin
      8   flag:=true;
      9   for j in 2..trunc(sqrt(n)) loop
     10   if n mod j=0 then
     11   flag:=false;
     12   exit;
     13   end if;
     14   end loop;
     15   if flag=true then
     16   shum:=true;
     17   else
     18   shum:=false;
     19   end if;
     20   return(shum);
     21*  end sushu;
    SQL> /函数已创建。SQL> declare
      2  n int;
      3  m boolean;
      4  k int:=0;
      5  begin
      6  for n in 2..100 loop
      7  m:=sushu(n);
      8  if m=true then
      9  DBMS_OUTPUT.PUT_LINE(n);
     10  k:=k+1;
     11  end if;
     12  end loop;
     13  DBMS_OUTPUT.PUT_LINE('2_100之间总共有'||to_char(k)||'个素数');
     14  end;
     15  /
    2
    3
    5
    7
    11
    13
    17
    19
    23
    29
    31
    37
    41
    43
    47
    53
    59
    61
    67
    71
    73
    79
    83
    89
    97
    2_100之间总共有25个素数PL/SQL 过程已成功完成。
    --1不属于素数,所以从2开始
    --刚有事情去了
      

  2.   

    CREATE OR REPLACE FUNCTION isSushu_fun(v_num NUMBER)
    RETURN VARCHAR2
    IS
      v_trunc NUMBER(18,0); -- 将输入参数取整
      v_seq NUMBER(18,0);   -- 求出输入数的算术平方根加1,用作循环条件
      v_isSushu VARCHAR2(100);
    BEGIN
      v_trunc := trunc(v_num);
      v_seq := sqrt(trunc(v_num))+1;
      v_isSushu := '是素数';
      FOR i IN 2..v_seq LOOP  -- 只能被1和他本身整除的数叫素数!
        IF mod(v_trunc,i) = 0 THEN
          v_isSushu := '不是素数';
          exit;
        END IF;
      END LOOP;
      return v_isSushu;
    EXCEPTION
      WHEN OTHERS
      THEN
        RETURN ('Error in running show_description');
    END;
    /
    select isSushu_fun(17) from dual;
      

  3.   

    select isSushu_fun(17) from dual;SET SERVEROUTPUT ON;DECLARE
      v_suShu VARCHAR2(40);
      v_isnum NUMBER(18,0);
      v_isNotnum NUMBER(18,0);
    BEGIN
      v_isnum := 0;
      FOR i IN 1..10000 LOOP
        v_suShu := isSushu_fun(i);
        IF v_suShu = '是素数' THEN
          v_isnum := v_isnum + 1;
          DBMS_OUTPUT.PUT_LINE(i||' '||v_suShu);
        END IF;
      END LOOP;
      DBMS_OUTPUT.PUT_LINE('从1到10000 之间的素数共有:'||v_isnum);
    END;
    /