注册 登录
编程论坛 VFP论坛

有关素数问题的简单vfp编程实例

独木星空 发布于 2023-09-09 21:41, 938 次点击
SELECT 1
USE D:\等差素数\素数表亿内.dbf ALIAS 素数表
SELECT 2
USE D:\等差素数\正三中.dbf ALIAS 正三
kssj=SECONDS()  &&取出开始时间
   
    SELECT 1
    GO 1
    FOR i=1 TO 5761450
        PUBLIC A
        A=素数
        jlh=recno() &&记录指针位置
        SKIP
        PUBLIC B
        B=素数
        SKIP
        PUBLIC C
        C=素数
           IF B-A=2 AND C-A=6 &&and是并且
           SELECT 2
           APPEND BLANK     &&增加一条空记录
           REPLACE 三中 WITH A+3
           ENDIF  
        SELECT 1
        GO jlh+1 &&定位到下一个起始位置
    ENDFOR
=MESSAGEBOX("运行时间:"+LTRIM(STR(INT((SECONDS()-kssj)/60)))+"分"+LTRIM(STR(MOD(SECONDS()-kssj,60),5,2))+"秒",64,"运行时间提示")
这是从现成的素数表中(安顺序放着1亿内的素数,共计5761455个),运行了0分9.32秒获得55600个最密三生素数(0,2,6)的中项。
13 回复
#2
独木星空2023-09-09 21:47
欢迎大家讨论,也可以直接写程序获得1亿内的最密三生素数(0,2,6)的中项,即假设第一位是素数P,则(P+2)及(P+6)也是素数时,这一组素数就是最密三生素数,其中项=P+3.
#3
独木星空2023-09-09 22:26
SELECT 1
USE d:\三生素数中项\正最密三生素数中项.DBF ALIAS 三中表
SELECT 2
USE d:\三生素数中项\各段三中个数.DBF ALIAS 三中个数周期表
kssj=SECONDS()
SELECT 1
     For j=1 to 238
      @ 3,6 say j
      fw=j*210000
            SELECT 1
            GO 1
            COUNT ALL FOR 三中<=fw TO tj
              SELECT  2  
              APPEND BLANK   
              REPLACE 范围 WITH fw
              REPLACE 总个数 WITH tj
     ENDFOR
   
    =MESSAGEBOX("运行时间:"+LTRIM(STR(INT((SECONDS()-kssj)/60)))+"分"+LTRIM(STR(MOD(SECONDS()-kssj,60),5,2))+"秒",64,"运行时间提示")
为了处理大数量合成问题,把整个数据安21万划分区块,化整为零,减少单次运算量。
这是一个系列问题,找到三生素数中项才是问题的开始。
#4
独木星空2023-09-11 10:47
看来素数问题,让人望而止步。
#5
独木星空2023-09-12 16:32
解决问题的过程也是编程算法的产生过程,它们之间互相印证。
#6
独木星空2023-09-13 23:56
SELECT 1
USE H:\素数式系数\素数表十亿.dbf ALIAS 素数表
kssj=SECONDS()  &&取出开始时间
s=7.500000000000000000
SELECT 1
  GO 4
  A=素数
  s=s*A*(A-6)/(A-3)^2
        SKIP 1
        FOR  j=1 TO 50876310
        SELECT 1
        B=素数
        s=s*B*(B-6)/(B-3)^2
        SELECT 1  
        SKIP
        ENDFOR

?s
=MESSAGEBOX("运行时间:"+LTRIM(STR(INT((SECONDS()-kssj)/60)))+"分"+LTRIM(STR(MOD(SECONDS()-kssj,60),5,2))+"秒",64,"运行时间提示")
#7
独木星空2023-09-14 00:03
上楼是计算正最密3生素数的中项减法中的合成系数(公共系数,即最小合成系数),也是这个问题的一个环节。
运行结果:2.117440757851877000
❶(只不过,标识不是1而是i)运行时间:2分31.66秒
#8
独木星空2023-09-15 18:08
这分是赠不出了,太冷门了。
没办法,你想的问题别人不想,也不好强求。
#9
schtg2023-09-15 18:17
这个主要是研究算法,值得我学习哈!无需给分。
#10
独木星空2023-09-15 21:27
SELECT 1
USE H:\三生素数中项合成\素数表十亿.DBF ALIAS 素表
SELECT 2
USE H:\三生素数中项合成\逆三生素数表.DBF ALIAS 三素表
kssj=SECONDS()
 For i=1 to 50876324
      @ 5,12 say i
    SELECT  1     &&打开盛放素数式的表
    jl=recno()
    PUBLIC A
    A=素数
    SKIP 1
    PUBLIC B
    B=素数
    cj=B-A
    SKIP 1
    PUBLIC C
    C=素数
    cj1=C-B
    IF cj=4 AND cj1=2
         SELECT 2
         APPEND BLANK     &&增加一条空记录
         REPLACE 逆三中 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,"运行时间提示")
是在10亿素数表筛选逆最密三生素数(0,4,6)的中项程序(中项---Mid Term)
#11
独木星空2023-10-19 21:26
我的所有灵感,都来自于对数学的兴趣,甚至是嗜好,那种离开数学,啥也不是的那种。
#12
独木星空2023-10-29 15:09
不知道时间长了,是忘记了,还是沉淀了。
#13
heping_fly2023-10-31 01:40
在我们这个3维空间,素数出现的规律不好找,可能在高维度空间里容易吧。。。
#14
独木星空2023-12-25 17:33
今天偶然登录(2023年12月25日),保存到收藏夹里了,还能通过链接打开。原先的,把道岔就指向别处了,仍就登录不上来。
1