数学中国

 找回密码
 注册
搜索
热搜: 活动 交友 discuz
楼主: 白新岭

[原创]请教vfbpgyfk先生一个编程问题

  [复制链接]
 楼主| 发表于 2020-10-6 13:08 | 显示全部楼层
SELECT 1
USE D:\VFP温习\素数式至23表.DBF ALIAS 素式表
SELECT 2
USE D:\VFP温习\素数23平表.DBF ALIAS 素数表
SELECT 3
USE D:\VFP温习\素数523平段表.DBF ALIAS 新素数表
kssj=SECONDS()
SELECT 1  
GO 92
FOR j=1 TO 44657
@ 5,12 say j
    SELECT 1  &&打开盛放素数式的表
     PUBLIC A
     A=素数式
     FOR i=1 TO 90
     SELECT 2
     GO i+8
     jl=RECNO()
     @ 7,14 say jl
      PUBLIC B
       B=素数
       IF MOD(A,B)=0
       EXIT
       ENDIF
     ENDFOR
     IF jl>97
     SELECT 3
     APPEND BLANK     &&增加一条空记录
      REPLACE 素数 WITH A &&将S初始值先付给素数式,即第一条记录值为1
     ENDIF
      SELECT 1
      SKIP
    endfor
    =MESSAGEBOX("运行时间:"+LTRIM(STR(INT((SECONDS()-kssj)/60)))+"分"+LTRIM(STR(MOD(SECONDS()-kssj,60),5,2))+"秒",64,"运行时间提示")
修改后,当限制jl>98时,仍然表3无数据,本次改成了jl>97,表3有了数据,可是523^2=273529正好在内,没有排除掉,正常限定大于98才对,无奈出现不了正确结果,才换成97,不知缘故在那儿。我手工把表3中最后一个数273529去掉了(为了表1中523不是最后一条记录,我特地填了个529,也同时去掉了。)
回复 支持 反对

使用道具 举报

 楼主| 发表于 2020-10-6 13:20 | 显示全部楼层
我通过以前的素数表,验证结果正确。1,素数23平表(98个素数,不包括2,在23^2内)
                                                   2,素数523平段表(23826个素数,起541(大于523),在523^2内)
回复 支持 反对

使用道具 举报

 楼主| 发表于 2020-10-7 06:54 | 显示全部楼层
CLEAR
s=0
i=2
DO WHILE i<=100
s=s+i
i=i+2
ENDDO
?"2-100的偶数和为:",s
return
今天早晨做了个小练习------求2-100的偶数和。
回复 支持 反对

使用道具 举报

 楼主| 发表于 2020-10-7 07:31 | 显示全部楼层
CLEAR
osj=0
jsj=0
k=1
DO WHILE k<=10
input'请输入一个整数:' to A
k=k+1
IF MOD(A,2)=0
osj=osj+1
ELSE
jsj=jsj+1
ENDIF
ENDDO
?"偶数有几个:,奇数有几个:",osj ,jsj
return
刚开始,因为没有写上k=k+1  而无法满足条件,进入了无限循环之中。
最后输出时,虽然?时英文状态下输入的,文本号也是,但是文本号之后没有加英文下逗号,提示信息,有无法识别的命令和短语。
回复 支持 反对

使用道具 举报

 楼主| 发表于 2020-10-7 20:34 | 显示全部楼层
SELECT 1
USE D:\VFP温习\素数表.DBF ALIAS 素表
SELECT 2
USE D:\VFP温习\L4二生素数表.DBF ALIAS 广孪中表
kssj=SECONDS()
For i=1 to 23923
      @ 5,12 say i
    SELECT  1     &&打开盛放素数式的表
    jl=recno()
    PUBLIC A
    A=素数
    SKIP 1
    PUBLIC B
    B=素数
    cj=B-A
    IF cj=4
         SELECT 2
         APPEND BLANK     &&增加一条空记录
         REPLACE 二生4中 WITH A+2          &&将N值付给素数式
    ENDIF
      SELECT 1
      GO jl+1
   ENDFOR
    =MESSAGEBOX("运行时间:"+LTRIM(STR(INT((SECONDS()-kssj)/60)))+"分"+LTRIM(STR(MOD(SECONDS()-kssj,60),5,2))+"秒",64,"运行时间提示")
这是从素数表中查找一般二生素数L4(P,P+4)的程序,找到后填写在另外一个表中,表中是广义孪中数,即一般二生素数L2n(P,P+2n)的中项,等于(P+P+2n)/2=P+n,这里n=2,所以广义孪中是P+2,它一定是合数,尾数只能是1,5,9.
回复 支持 反对

使用道具 举报

 楼主| 发表于 2020-10-7 20:46 | 显示全部楼层
SELECT 1
USE D:\VFP温习\素数表.DBF ALIAS 素表
SELECT 2
USE D:\VFP温习\L6二生素数表.DBF ALIAS 广孪中表
kssj=SECONDS()
For i=1 to 23922
      @ 5,12 say i
    SELECT  1     &&打开盛放素数式的表
    jl=recno()
    PUBLIC A
    A=素数
    SKIP 1
    PUBLIC B
    B=素数
    cj1=B-A
    SKIP 1
    PUBLIC C
    C=素数
    cj2=C-A
    IF cj1=6 OR cj2=6
         SELECT 2
         APPEND BLANK     &&增加一条空记录
         REPLACE 二生6中 WITH A+3          &&将N值付给素数式
    ENDIF
      SELECT 1
      GO jl+1
   ENDFOR
    =MESSAGEBOX("运行时间:"+LTRIM(STR(INT((SECONDS()-kssj)/60)))+"分"+LTRIM(STR(MOD(SECONDS()-kssj,60),5,2))+"秒",64,"运行时间提示")
寻找一般二生素数L6(P,P+6)并输出存档。
回复 支持 反对

使用道具 举报

 楼主| 发表于 2020-10-7 20:54 | 显示全部楼层
SELECT 1
USE D:\VFP温习\素数表.DBF ALIAS 素表
SELECT 2
USE D:\VFP温习\L8二生素数表.DBF ALIAS 广孪中表
kssj=SECONDS()
For i=1 to 23921
      @ 5,12 say i
    SELECT  1     &&打开盛放素数式的表
    jl=recno()
    PUBLIC A
    A=素数
    SKIP 1
    PUBLIC B
    B=素数
    cj1=B-A
    SKIP 1
    PUBLIC C
    C=素数
    cj2=C-A
    SKIP 1
    PUBLIC D
    D=素数
    cj3=D-A
    IF cj1=8 OR cj2=8 OR cj3=8
         SELECT 2
         APPEND BLANK     &&增加一条空记录
         REPLACE 二生8中 WITH A+4          &&将N值付给素数式
    ENDIF
      SELECT 1
      GO jl+1
   ENDFOR
    =MESSAGEBOX("运行时间:"+LTRIM(STR(INT((SECONDS()-kssj)/60)))+"分"+LTRIM(STR(MOD(SECONDS()-kssj,60),5,2))+"秒",64,"运行时间提示")
寻找一般二生素数L8(P,P+8)并输出存档。
回复 支持 反对

使用道具 举报

 楼主| 发表于 2020-10-8 07:12 | 显示全部楼层
语文英语编程同步进行。在词中学字,在句中学词,在文章中学句,在小说中学文章。学而不思则罔,思而不学则殆。相辅相成。今天学jian平声“戋”字,【戋戋】,小,少之意。遇见"解”字,牛角用刀为解,庖丁解牛也。
回复 支持 反对

使用道具 举报

 楼主| 发表于 2020-10-8 07:56 | 显示全部楼层
!在VFP中是什么意思啊
!”是从baiC语系移植来的,我就用du“移植”这个词吧,因为首zhi先出现在C语言中,表示dao“否定”的含义,现在VFP(似乎从5.0开始)也用这个符号表示同样的意思,用在逻辑表达式中,作为逻辑非运算,等效于.NOT.,用在关系运算符中表示“不”,如“!=”等效于“<>”或“#”。
这是我在浏览一个编好的程序中看到的,不懂其意义,就上网查了下。
回复 支持 反对

使用道具 举报

 楼主| 发表于 2020-10-8 08:08 | 显示全部楼层
求300以内能被17整除的所有整数。
CLEAR
FOR x=1 TO 300
  IF x%17!=0
    LOOP
    ELSE
    ?x
  ENDIF
endfor
300以内即从1到300,如果x不能被整除,就结束本次循环,进入下一个;如果能整除,就在屏幕上输出(显示)。
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

本版积分规则

Archiver|手机版|小黑屋|数学中国 ( 京ICP备05040119号 )

GMT+8, 2025-7-6 03:03 , Processed in 0.087750 second(s), 20 queries .

Powered by Discuz! X3.4

Copyright © 2001-2020, Tencent Cloud.

快速回复 返回顶部 返回列表