do input Q& if Q&=IsZhiShu&(Q&) then print Q&;"是质数" loop while Q& FUNCTION IsZhiShu& (a&) f% = FREEFILE OPEN "质数表" FOR RANDOM AS #f% LEN = LEN(a&) IF LOF(f%) = 0 THEN z& = 2 PUT #f%, 1, z& z& = 3 PUT #f%, 2, z& END IF e& = LOF(f%) \ LEN(a&) GET #f%, e&, z& SELECT CASE a& CASE IS <= 2 IsZhiShu& = 2 CASE IS >= z& DO UNTIL z& >= a& DO z& = z& + 2 q& = SQR(z&) i& = 2 DO GET #f%, i&, k& IF z& MOD k& = 0 THEN EXIT DO i& = i& + 1 LOOP UNTIL k& > q& LOOP UNTIL k& > q& e& = e& + 1 PUT #f%, e&, z& 'LOCATE 5, 5: PRINT e&, z& LOOP IsZhiShu& = z& CASE IS < z& l& = 1 r& = e& DO m& = (r& + l&) / 2 GET #f%, m&, b& 'if a&=b& then ' r&=m& ' exit do 'end if IF a& > b& THEN l& = m& ELSE r& = m& LOOP UNTIL r& - l& < 2 GET #f%, r&, IsZhiShu& END SELECT CLOSE #f% END FUNCTION FUNCTION fenjie$ (x&) if x&=0 then fenjie$="0" exit function elseif x&<0 then x&=-x& k$="-1" end if f% = FREEFILE OPEN "质数表" FOR RANDOM AS #f% LEN = LEN(a&) i& = 1 j& = 2 DO UNTIL x& = 1 IF x& MOD j& = 0 THEN x& = x& / j& IF k$ = "" THEN k$ = LTRIM$(STR$(j&)) ELSE k$ = k$ + "*" + LTRIM$(STR$(j&)) ELSE i& = i& + 1 GET #f%, i&, j& END IF LOOP CLOSE #f% fenjie$ = k$ END FUNCTION

评论