|

楼主 |
发表于 2019-3-18 13:05
|
显示全部楼层
CLEAR ALL
SELECT 1
USE c:\vfp学习\s3165万内素数.DBF ALIAS 素数表
SELECT 2
USE c:\vfp学习\逆11生成元.DBF ALIAS 十一生元表
SELECT 3
USE c:\vfp学习\逆10生成元31.DBF ALIAS 十生元表
kssj=SECONDS() &&取出开始时间
SELECT 十生元表
go 2242184 &&每次循环开始一定不要忘记把指针移动指定位置,以防止跑空趟(或重复原先的工作),只有把指针移动到上次工作的最后一条记录之下,才能分批次完成任务
For N=1 to 2000000
@ 3,6 say 十生元31
X=十生元31-2046
SELECT 素数表
go 3
FOR I=1 TO 8 &&内循环开始。这个循环实质上是从小到大顺序,依次读取素数。
@ 2,5 say 素数
IF X%素数=0
EXIT
ENDIF
SKIP &&素数表指针向下移动一个
ENDFOR
IF I>8 &&一定不要忘记把此值改成排查素数的个数,即内循环次数
SELECT 十一生元表 &&打开盛放素数的表
APPEND BLANK &&增加一条空记录
REPLACE 十一元 WITH X+2046 &&将N值付给素数
ENDIF
SELECT 十生元表
skip
ENDFOR
=MESSAGEBOX("运行时间:"+LTRIM(STR(INT((SECONDS()-kssj)/60)))+"分"+LTRIM(STR(MOD(SECONDS()-kssj,60),5,2))+"秒",64,"运行时间提示")
这是用低阶k生素数生成元制作高一阶的生成元程序,它是分批次完成任务,所以每次结束之后,一定要把指针移动到上次执行完最后一条记录之下。 |
|