求出
10000以内,被
2除余
1,被
3除余
2,被
4除余
3,被
5除余
4,被
6除余
5,被
7除余
6,被
8除余
7,被
9除余
8的自然数。源程序
ex7_1.prg如下:
SET
TALK
OFF
CLEA
CLEA ALL
FOR i = 1 TO 10000
IF MOD (i, 2 ) = 1 AND MOD (i, 3 ) = 2 ;
AND MOD (i, 4 ) = 3 AND MOD (i, 5 ) = 4 ;
AND MOD (i, 6 ) = 5 AND MOD (i, 7 ) = 6 ;
AND MOD (i, 8 ) = 7 AND MOD (i, 9 ) = 8
CLEA
CLEA ALL
FOR i = 1 TO 10000
IF MOD (i, 2 ) = 1 AND MOD (i, 3 ) = 2 ;
AND MOD (i, 4 ) = 3 AND MOD (i, 5 ) = 4 ;
AND MOD (i, 6 ) = 5 AND MOD (i, 7 ) = 6 ;
AND MOD (i, 8 ) = 7 AND MOD (i, 9 ) = 8
? i
ENDIF
ENDFOR
RETU
ENDIF
ENDFOR
RETU
按照这种方法,思维比较直观,也容易实现,但程序效率太低,有必要作一下优化。设x为满足条件的数,根据题意,则x+1是2、3、4、5、6、7、8、9的公倍数,即x+1是其最小公倍数2520的倍数,并且x+1在10001的范围内,所以第一个满足条件的数是2520-1。据此编写程序可以高速度2520倍。源程序ex7_2.prg如下:
SET
TALK
OFF
CLEA
CLEA ALL
FOR i = 2520 TO 10000 + 1 STEP 2520
? i - 1
ENDFOR
RETU
CLEA
CLEA ALL
FOR i = 2520 TO 10000 + 1 STEP 2520
? i - 1
ENDFOR
RETU