| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 10535 人关注过本帖
标题:用删除法编写一个制作素数表的vfp程序
取消只看楼主 加入收藏
独木星空
Rank: 16Rank: 16Rank: 16Rank: 16
来 自:河北省曲阳县
等 级:版主
威 望:71
帖 子:865
专家分:683
注 册:2016-6-29
收藏
得分:0 
希望大家提出优化建议。三楼有两个表,加上31楼的程序,就可以运行了。

素数问题的解决是我学习编程永恒的动力。
2021-09-15 06:03
独木星空
Rank: 16Rank: 16Rank: 16Rank: 16
来 自:河北省曲阳县
等 级:版主
威 望:71
帖 子:865
专家分:683
注 册:2016-6-29
收藏
得分:0 
回复 35楼 吹水佬
所用到的表文件已经在3楼发出。程序也在31楼发出。您是要运行结果表文件吗?

素数问题的解决是我学习编程永恒的动力。
2021-09-15 08:13
独木星空
Rank: 16Rank: 16Rank: 16Rank: 16
来 自:河北省曲阳县
等 级:版主
威 望:71
帖 子:865
专家分:683
注 册:2016-6-29
收藏
得分:0 
回复 35楼 吹水佬
程序需要用到的五个表上传在这里(它们是自由表,已从数据库中导出,只是表明加了后缀---副表2字,其他未变动),程序在31楼,对应着稍微修改就可以用了。(路径及表名等信息)
数据表a副表.zip (893.02 KB)
数据表b副表.zip (893.03 KB)
数据源表副表.zip (2.2 MB)
素数表5万副表.zip (9.51 KB)
素数表结果副表.zip (3.65 MB)

素数问题的解决是我学习编程永恒的动力。
2021-09-15 08:27
独木星空
Rank: 16Rank: 16Rank: 16Rank: 16
来 自:河北省曲阳县
等 级:版主
威 望:71
帖 子:865
专家分:683
注 册:2016-6-29
收藏
得分:0 
回复 18楼 laowan001
在31楼已经有了程序。另外在37楼所用表已经全部上传。静候您的佳音。

素数问题的解决是我学习编程永恒的动力。
2021-09-15 09:39
独木星空
Rank: 16Rank: 16Rank: 16Rank: 16
来 自:河北省曲阳县
等 级:版主
威 望:71
帖 子:865
专家分:683
注 册:2016-6-29
收藏
得分:0 
回复 41楼 吹水佬
t=SECONDS()
N=20000000
DIMENSION arr[N,1]
arr=.T.
i=2
DO WHILE i<=N
    FOR j=i+i TO N STEP i
    arr[j]=.F.
    ENDFOR
    j=i+1
    DO WHILE j<=N AND !arr[j]
    j=j+1
    ENDDO
    i=j
 ENDDO
 CREATE CURSOR tt(bol L,num I)
 INSERT INTO tt FROM ARRAY arr
 REPLACE ALL num WITH RECNO()
 SELECT num FROM tt WHERE bol AND RECNO()>1 INTO TABLE 素数表
 ?SECONDS()-t &&N=20000000-38.754s ,N=40000000-78.142s
我按照您的程序手工抄录了一遍。用时较少,结果存盘到:C:\program files(X86)\vfp9\素数表.dbf 中了

素数问题的解决是我学习编程永恒的动力。
2021-09-15 13:04
独木星空
Rank: 16Rank: 16Rank: 16Rank: 16
来 自:河北省曲阳县
等 级:版主
威 望:71
帖 子:865
专家分:683
注 册:2016-6-29
收藏
得分:0 
回复 45楼 laowan001
首先多谢先生的回答。我还没有运行。那也比我原来的提速不少。

素数问题的解决是我学习编程永恒的动力。
2021-09-15 16:08
独木星空
Rank: 16Rank: 16Rank: 16Rank: 16
来 自:河北省曲阳县
等 级:版主
威 望:71
帖 子:865
专家分:683
注 册:2016-6-29
收藏
得分:0 
回复 46楼 laowan001
两楼都提到吹水佬算法问题,我有点喧宾夺主了,本不该回答的,只知道大概的意思,我把程序抄写到程序中,第一次运算结果出来后,竟然连素数表也没有找到,无奈之下运行了第二次,这是出现提示信息,说那个路径之下已经存在了,是否替换,这时我才找到存放素数表的路径。
扯多了,扯远了,回到正题,他的算法就像体育课老师让学生报数那样,从开头报数,报偶数者出列(第一个报的不出列),接着报3的倍数的出列,报5的倍数出列(当然他是把它们标记为假,false,开始都标记为真,true),这样直到小于等于N为止,然后把所有标记为真的存放到素数表中(当然第一条记录排除在外,它是1)

[此贴子已经被作者于2021-9-15 16:34编辑过]


素数问题的解决是我学习编程永恒的动力。
2021-09-15 16:25
独木星空
Rank: 16Rank: 16Rank: 16Rank: 16
来 自:河北省曲阳县
等 级:版主
威 望:71
帖 子:865
专家分:683
注 册:2016-6-29
收藏
得分:0 
回复 46楼 laowan001
我的48楼答非所问。是我没有看懂各位的提问。多言了。吹水佬没有用到数据源(用不用素数表不重要,因为此主题的目的是要用到数据源,形成分段运算,更深层目的没有明说(计划改造后用到其他程序中去))。

素数问题的解决是我学习编程永恒的动力。
2021-09-15 17:00
独木星空
Rank: 16Rank: 16Rank: 16Rank: 16
来 自:河北省曲阳县
等 级:版主
威 望:71
帖 子:865
专家分:683
注 册:2016-6-29
收藏
得分:0 
回复 45楼 laowan001
CLEAR
CLOSE DATABASES

LOCAL kkk

SELECT 1
USE D:\标记法\数据源表.DBF ALIAS 数据源
SELECT 2
USE D:\标记法\素数表5万.DBF ALIAS 素数表参

SELECT 5
USE D:\标记法\素数表结果1.DBF ALIAS 素数表果
DELETE ALL
PACK

SELECT 素数 数据1 FROM 素数表果 WHERE 1=2 INTO CURSOR 数据a READWRITE

kssj = DATETIME()
FOR i=1 TO 2
    SELECT 素数式+(i-1)*9699690 数据1,CAST(1 as INT) 数据mod FROM 数据源 INTO CURSOR 数据a READWRITE

    SELECT 数据a
    GO BOTTOM     &&1658880
    Kf=INT(SQRT(数据1))

    SELECT 2
    kkk = 0
    SCAN FOR RECNO()>8 AND 素参<=kf
        IF RECNO()>kkk
            WAIT TRANSFORM(RECNO()) WINDOW NOWAIT NOCLEAR
            kkk = kkk + 10
        ENDIF
        
        UPDATE 数据a SET 数据mod=MOD(数据1,素数表参.素参) WHERE 数据mod>0

        SELECT 2
    ENDSCAN
   
    INSERT INTO 素数表果 (素数) SELECT 数据1 FROM 数据a WHERE 数据mod>0
   
 ENDFOR
 USE IN 数据a
 
 MESSAGEBOX( DATETIME()-kssj)
 SELECT 素数表果
 MESSAGEBOX( RECCOUNT())
 BROWSE
我把程序复制,简单改了下(路径及字段名)。运算结果正确。用时610秒,看来电脑配置不行,运算有点慢。

素数问题的解决是我学习编程永恒的动力。
2021-09-15 17:15
独木星空
Rank: 16Rank: 16Rank: 16Rank: 16
来 自:河北省曲阳县
等 级:版主
威 望:71
帖 子:865
专家分:683
注 册:2016-6-29
收藏
得分:0 
回复 45楼 laowan001
用您的程序运算了3周和4周(每周跨度9699690,需要筛选1658880个数据)用时862秒(第一次的1,2周用时610可能不正确,因为那是运行中显示的数字?,这次运行时,它返回了一次,应该是每周的关联值,循环次数什么),素数个数(记录条数)1130040,与以前的素数表比对:19399380内(2周以内)1234841个,38798760内(4周以内)2364881个,差值1130040,与运算结果一致。
只是把原表已经覆盖,所以再次运行前,需要存放到一个不相干的表中。

素数问题的解决是我学习编程永恒的动力。
2021-09-15 17:50
快速回复:用删除法编写一个制作素数表的vfp程序
数据加载中...
 
   



关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.015219 second(s), 10 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved