数学中国

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

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

  [复制链接]
 楼主| 发表于 2020-10-14 10:45 | 显示全部楼层
从N=1054001 到 1055000之间1000个数,每个带着3个数(倍数30),总跨度1000*30=3万,处理数值3000个,用时166分51.82秒,比蜗牛还慢。不知与22+30n的数无解是否关联。
回复 支持 反对

使用道具 举报

 楼主| 发表于 2020-10-14 21:25 | 显示全部楼层
简单的练习一下:\(a^2+b^2\)\(=c^2\)好了
回复 支持 反对

使用道具 举报

 楼主| 发表于 2020-10-14 21:26 | 显示全部楼层
原来写出漂亮美观的数学式子并不难。
回复 支持 反对

使用道具 举报

 楼主| 发表于 2020-10-14 21:45 | 显示全部楼层
再练习一下:\({5^{10}}^6\) 与\(x^{y^{zc}}\) 和 \(a^{102}+c^9\) 可以了,注意当上标或者下标不是一个字符时必须用花括号括起来,最起码的是,所表达数学式子先用斜杠标记起来,然后输入小括号,结束本次时,先输入斜杠,后括上小括号就ok了,输下标时按住上档键在按减号键或者键盘上挨着上小括号下数字0的键的右边键,输入下标与上标注意事项一样,当不是一个字符时,一定用花括号括起来。不知道表述是否正确。
回复 支持 反对

使用道具 举报

发表于 2020-10-18 17:30 | 显示全部楼层
用计数函数做为vfp的处理问题的关键是所掐范围是否可以全覆盖。因为我发现了处理结果不完全正确,有误判情况。
回复 支持 反对

使用道具 举报

发表于 2020-10-19 12:55 | 显示全部楼层
今天用了344#楼的程序,运行速度加快。但是比对后发现,仍就有个别偶数被冒检了出来,有待完善。
回复 支持 反对

使用道具 举报

发表于 2020-10-19 16:42 | 显示全部楼层
以大定小的方法加快了运算速度,兵贵神速。想打好仗,就得有过硬的武器,没有硬武器装备,很难打胜仗。
回复 支持 反对

使用道具 举报

发表于 2020-10-19 16:52 | 显示全部楼层
* 以大定小选配素数对
LOCAL xjl,djl,ts,xss,dss,kssj,tj
CLEAR
SELECT 1
USE D:\vfp温习\L6三生素数24合成结果表大小论.DBF ALIAS 素数对    &&素数对表结构:偶数、统计
SELECT 2
USE D:\vfp温习\L6三生素数24表.DBF EXCL ALIAS 素数表
kssj=SECONDS()
FOR n=300001  to 400000
@ 3,6 say n
    FOR m=28 TO 40 STEP 6
          X=m+(n-1)*30
          Y=X/2   &&求出偶数的中值
        SELECT 素数表
        LOCATE FOR 三生24中>X
        DO CASE
                CASE EOF()
                        GO Bottom
                CASE 三生24中>X
                        SKIP -1
        ENDCASE
        xjl=1
        djl=RECNO()
        t=.T.
        DO WHILE t
                dss=三生24中
                GO xjl
                xss=三生24中
                                              &&放在这里比较合适,这里原来显示小素数的值,去掉了。
                IF xss<Y OR dss>Y                              &&判断跳出语句如果放在后面,有时出现一个重复素数对
                          t=.T.
                          ELSE
                          t=.F.                                       &&跳出命令
                ENDIF                                               &&结束判断
                DO CASE
                        CASE xss+dss>X
                                GO djl
                                SKIP -1
                                djl=RECNO()
                        CASE xss+dss=X
                                EXIT
                        CASE xss+dss<X
                                GO xjl
                                SKIP
                                xjl=RECNO()
                                GO djl
                ENDCASE
        ENDDO
        IF xss>=Y OR dss<=Y
        SELECT 素数对
                                APPEND BLANK
                                REPLACE 偶数 WITH X
        ENDIF
   ENDFOR
ENDFOR
=MESSAGEBOX("运行时间:"+LTRIM(STR(INT((SECONDS()-kssj)/60)))+"分"+LTRIM(STR(MOD(SECONDS()-kssj,60),5,2))+"秒",64,"运行时间提示")
这个程序明显快于其他程序,在寻找不能被合成的数中,发挥了它的长处,绝招。
回复 支持 反对

使用道具 举报

发表于 2020-10-19 18:31 | 显示全部楼层
程序上一念之差谬之千里。对于计数函数及指针的移动要了如指掌,才能正确判断。
回复 支持 反对

使用道具 举报

发表于 2020-10-19 20:31 | 显示全部楼层
假设开始指针在i那儿
A=素数
count next 9 for 30=素数-A to js1  &&此语句表示从i到i+9的记录范围内,统计素数差值是30的个数,根据素数的唯一性,即每个素数与每个素数的值都不一样,所以最多有一个素数符合条件(素数差值是30).
count next 18 for 60=素数-A to js2  &&近接上边(或前边的)语句,它是从第i+9+1起到i+9+18至之间是否有符合条件的素数,也就是累计效应,它并不会从新从i+1到i+18之间寻找。所以查找范围的开始,还得从新调整,指针移动到某位置是不会自动返回去的,要人为调整。在不了解指针的移动规律时会出错,当然你得先了解next n 的意思,它是从当前位置向后移动n次指针。
所以在,第一个计数函数与第二个计数函数之间,要有一条回复原位的语句,即加上:go i (把指针还调到A所在位置)。
这就是第一回,没有全部检测出等差d30的三生素数的原因。
回复 支持 反对

使用道具 举报

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

本版积分规则

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

GMT+8, 2024-6-26 11:28 , Processed in 0.062500 second(s), 15 queries .

Powered by Discuz! X3.4

Copyright © 2001-2020, Tencent Cloud.

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