我想打印1 to 50
之间的素数。但我不明白我在代码中做错了什么。在BEGIN
之后,SQLEdeveloper说我有一个错误,因为它需要另一个符号,而不是=
。
SET SERVEROUTPUT ON
DECLARE
i NUMBER;
counter NUMBER;
n NUMBER;
k NUMBER;
BEGIN
i := 2;
counter := 0;
n := 50;
k := n/2;
FOR i IN 1..k LOOP
IF (n%i := 0 ) THEN
counter := 1;
END IF;
IF (counter := 0) THEN
DBMS_OUTPUT.PUT_LINE(n||' is prime number');
END IF;
END LOOP;
END;
9条答案
按热度按时间af7jpaap1#
k := n/2;
-- added FLOOR(k为NUMBER,默认为NUMBER(38,max_scale))IF (n%i := 0 ) THEN
->IF (mod(n, i) = 0 ) THEN
Oracle有余数+比较的MOD函数,需要使用
=
,:=
用于赋值。xpcnnkqh2#
在IF子句中,是赋值而不是比较。你正在使用:=运算符,这里你应该使用=
它应该像(如果计数器= 0)那么……
我也不认为n%i会工作,你可以做IF(trunc(n)= n)然后...或如果(mod(n,i)=0),则…
uklbhaso3#
b1uwtaje4#
9bfwbjaz5#
您应该在源代码中创建或替换:
dy2hfwbg6#
你为什么不检查一下之前的素数整除性呢?
您当然可以限制在where条件下检查的数字,以进一步减少开销。
js4nwp547#
qmelpv7a8#
wvmv3b1j9#