数学中国

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

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

  [复制链接]
 楼主| 发表于 2019-3-11 10:35 | 显示全部楼层
可以打开两个vfp窗口,同时工作,而在excel中却不能,多个表可以打开,但是只能有一个表工作。
 楼主| 发表于 2019-3-12 17:44 | 显示全部楼层
用了2*3*5*7*11*13*17*19*23大概2.2亿的筛子筛出了80640个生成元(能产生九生素数等比数列),极大的缩短了程序运行时间。
 楼主| 发表于 2019-3-12 17:50 | 显示全部楼层
用时8分33.51秒,2个周期,16万多个数据。从结果看只运行了一次外循环。
 楼主| 发表于 2019-3-12 21:32 | 显示全部楼层
在ip上运行的结果是,在2亿得到6组9生素数等比数列,有个很小,才2591,减间距后有2个是5的整倍数,所以末尾是1的生成元都是假的,但是产生生成元时,只有17与23是符合条件的(在三生素数生成元中,过0,2,4的),如果上升到9生素数时,能过2,3,5的只有一个,那就是除2余1,除3余2,除5余2,那样只有17(当时把23也算在内了,如果往后加8,16,32,64,128,256,6个数正好504,得到521和527,527是23加504获得,按说素数差为等比数列,就必须在它们的基础上加504才行,可实际情况是必须加整周期,30的倍数,应为510,这与加504相矛盾,因为如果以2,3,5做基础,就必须此数是除2余1,除3余2,除5余2,这时527符合条件,而521不付和条件,虽然它是在符合条件17的基础上加了到它的距离,而527是在23不符合条件的基础上加了504得到,少加了6,这里的关系很复杂,如果想保证同余,就必须加它们积的整倍数,如果想获得同样的间隔,就必须加它到最后一个素数之间的所有差项,可它们不是同一个值),所以要两面都兼顾并不容易。
 楼主| 发表于 2019-3-12 22:21 | 显示全部楼层
* 请注意,外循环是k?生成初始值?.dbf中[生成元?]字段中的记录条数目,即有多少个不同的值就有多少次外循环
CLEAR ALL
SELECT 1
use E:\用vfp求k生素数数量\九生等比素数生成元.dbf ALIAS 九生元表  &&注意,表开头不允许以数字开头,每次增倍一个素数周期,就把表名结尾的数字改成相符的数(指与新素数相同)
SELECT 2
USE E:\用vfp求k生素数数量\九生素数等比生成元新.DBF ALIAS 九生元新 &&注意,表开头不允许以数字开头,每次增倍一个素数周期,就把表名结尾的数字改成相符的数(指与新素数相同)
*INPUT "请输入外循环开始值 wxhks=" TO wxhks
*INPUT "请输入外循环结束值 wjs=" TO wjs
*INPUT "请输入内循环开始值 nks=" TO nks
*INPUT "请输入内循环结束值 njs=" TO njs
kssj=SECONDS()
SELECT  九生元表
FOR h=1 TO   80640 &&注意,当复制此程序模版时一定把外循环次数改成工作区2打开表的总记录条数的值
        bpz=九生元     &&注意这条语句中的生成元?字段名末尾的数字,它是两个素数较小的一个
                 @ 12,15 say bpz
                qmz=MOD(bpz,5)       &&注意取模素数,它是较大的一个素数
                IF qmz=1   &&这里的预先给的限制余数是对qmz中的素数取模的余数,如果大于上边的素数,也需把余数改为同余的余数
                ELSE
                        SELECT  九生元新
                        APPEND BLANK
                        REPLACE 九生元 WITH bpz
                ENDIF
        SELECT  九生元表
        SKIP
ENDFOR
=MESSAGEBOX("运行时间:"+LTRIM(STR(INT((SECONDS()-kssj)/60)))+"分"+LTRIM(STR(MOD(SECONDS()-kssj,60),5,2))+"秒",64,"运行时间提示")
CLEAR ALL
经过改了几遍,才完成任务,开始有go 1,执行结果除第一条记录外,其它都为0;后来去了,运行结果还是除第一条记录外,都是0,而且80640条记录,一条都不少;最后把skip前加了选择工作区,把指针下移一个,这才完成任务,没有跑空,这才明白,循环一次把指针移动一次。
 楼主| 发表于 2019-3-13 07:11 | 显示全部楼层
如果想保持(0,2,4)这种素数式结构,就必须是以30为周期,它是除2余1,除3余2,除5余2的,即只有30m+17型的数才符合要求,如果增加条件,在此基础上进行筛选生成元,只需把值加到大于它们的总跨度即可,不是加它与最后一个素数式的差值,例如4生的,不是加8,也不是减8,四生总间距为2+4+8=14小于17,可以用17开头,加30的整倍数;而5生的总夸度是30,已经大于17了,就用17+30=47作为初始值;6生的总间距为62,可以用77开头,只要差值在30以内即可(正差值,不要负差值);7生的总间距为126,那就用137作为初始值;8生的总间距为254,可以用257作为初始值;9生的总间距为510,正好是30的整倍数,所以用527作为初始值;10生的总间距为1022,所以可以用1037作为初始值;总之,即不是加它们的差值,也不是减它们的差值,而是加30的整周期,让初始值大于总间距即可,如果是在低一阶的生成元中产生高一阶的生成元,就用它的生成元作为初始值,直接加它的周期整倍数即可,至于小的初始值,只会在第一个0周期内出现,以后不会出现,这不妨碍新生成元。
 楼主| 发表于 2019-3-13 07:23 | 显示全部楼层
看来多数的数值有效数字都是15位的,不知道大于15位有效数字如何处理
 楼主| 发表于 2019-3-13 09:17 | 显示全部楼层
326楼探讨的问题仍然有误,对于9生的生成元来说,如果从3生的生成元获得,初始值是527(它减30*17余17),而其它的就不是了,还是有上一个生成元+最后一个素数-此生成元(2^K),得到新的进行判断。所以尾数是1,3,7,9发生交换的。
 楼主| 发表于 2019-3-13 13:16 | 显示全部楼层
CLEAR ALL
SELECT 1
USE c:\vfp学习\s3165万内素数.DBF ALIAS 素数表
SELECT 2
USE  c:\vfp学习\九生等比生成元.DBF ALIAS 九生元表
SELECT 3
USE  c:\vfp学习\十生等比生成元.DBF ALIAS 十生元表  
    kssj=SECONDS()                      &&取出开始时间
SELECT 九生元表
   For N=1 to 40320
    @ 3,6 say N
    X=九素元+512
           SELECT 素数表
           go 3
            FOR I=1 TO 6 &&内循环开始。这个循环实质上是从小到大顺序,依次读取素数。
            @ 2,5 say  素数   
                IF  X%素数=0 OR X%素数=512%素数 OR X%素数=768%素数 or X%素数=896%素数 OR X%素数=960%素数 OR X%素数=992%素数 or X%素数=1008%素数 OR X%素数=1016%素数 OR X%素数=1020%素数 OR X%素数=1022%素数
                  EXIT        
                ENDIF
                SKIP            &&素数表指针向下移动一个
            ENDFOR
            IF I>6
                SELECT   十生元表        &&打开盛放素数的表
                APPEND BLANK                &&增加一条空记录
                REPLACE 十生元 WITH X     &&将N值付给素数
            ENDIF
        SELECT 九生元表
        skip
   ENDFOR
   =MESSAGEBOX("运行时间:"+LTRIM(STR(INT((SECONDS()-kssj)/60)))+"分"+LTRIM(STR(MOD(SECONDS()-kssj,60),5,2))+"秒",64,"运行时间提示")
这是用9生素数等比生成元制作10生素数等比生成元的程序,求模条件要0就足够了,其它的没有用。
 楼主| 发表于 2019-3-13 18:21 | 显示全部楼层
用时44分33.77秒,100个周期运算到220多个亿时。一个十一生素数也没有产生。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

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

GMT+8, 2024-6-26 12:12 , Processed in 0.078125 second(s), 15 queries .

Powered by Discuz! X3.4

Copyright © 2001-2020, Tencent Cloud.

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