回 帖 发 新 帖 刷新版面

主题:请问哪错了?

'1、打印1000以内的亲密素数。相差为2的两个数,如果它们都是素数(myPri(x)),则称为亲密素数。 
DECLARE FUNCTION MYPRI(BYVAL X AS INTEGER) AS INTEGER
DIM AS INTEGER I
FOR I=3 TO 1000 
    IF MYPRI(I)=I AND MYPRI(I+2)=I+2 THEN ? I;
NEXT I
FUNCTION MYPRI(BYVAL X AS INTEGER) AS INTEGER
    DIM AS INTEGER F,T,J
    F=0
    FOR J=2 TO 1000 
        IF X MOD J=0 THEN F=1
    IF F=1 THEN MYPRI=X
NEXT J
END FUNCTION

回复列表 (共2个回复)

沙发

错误:
第一,在主程序的FOR循环里,最后打印的应该是I,I+2,但是你只答应了一个;
第二,这个函数的意思是假如是素数那么函数值就是本身,可是你刚好弄反了;
第三,改过以后发现假如是合数的话就缺少语句函数名=函数值。
优化:
第一,在函数中定义的T是多余的;
第二,在函数中的FOR循环的循环终值可以简化成INT(SQR(X));
第三,只要有一次能够整除就可以退出循环,所以IF X MOD J=0 THEN F=1后面加上":EXIT FOR"。
正确程序:
DECLARE FUNCTION MYPRI(BYVAL X AS INTEGER) AS INTEGER
DIM AS INTEGER I
FOR I = 3 TO 1000 
    IF MYPRI(I) = I AND MYPRI(I + 2) = I + 2 THEN PRINT I; I+2,
NEXT I
END

FUNCTION MYPRI(BYVAL X AS INTEGER) AS INTEGER
    DIM AS INTEGER F,J
    FOR J = 2 TO INT(SQR(X)) 
        IF X MOD J = 0 THEN F = 1: EXIT FOR
    NEXT J
    IF F = 1 THEN MYPRI = 0 ELSE MYPRI = X
END FUNCTION

板凳

谢谢

我来回复

您尚未登录,请登录后再回复。点此登录或注册