标题:用删除法编写一个制作素数表的vfp程序
只看楼主
吹水佬
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
等 级:版主
威 望:432
帖 子:10064
专家分:41463
注 册:2014-5-20
得分:3 
先整好一个存放素数DBF,用时查表
2021-09-14 15:28
独木星空
Rank: 16Rank: 16Rank: 16Rank: 16
来 自:河北省曲阳县
等 级:版主
威 望:57
帖 子:713
专家分:556
注 册:2016-6-29
得分:0 
回复 18楼 laowan001
所用到到的两个表已经压缩后,发在本主题中了,在三楼或四楼,原理简单,与单个筛选素数一致,只是本问题需要成批处理数据,就这点区别。我并没有编出程序,也没有结果,只是大概知道过程,一共涉及4个表,有一个表放素数(即运算结果),一个表放数据源(或者被处理数据,它是一个自然数段,经过了预处理,后续调用时,只需加周期9699690即可),数据a和数据b两个表是最内层用到的表,它们互相替换,直到完成最后一步筛查,把最终结果抄写到素数表结果中即可。奥,忘了,还有预先制的素数表,在最里层需要它做筛选条件,这样一共5表。

素数问题的解决是我学习编程永恒的动力。
2021-09-14 15:33
skyingcat
Rank: 1
等 级:新手上路
帖 子:1
专家分:0
注 册:2021-9-14
得分:0 
嗯,好长
2021-09-14 15:37
独木星空
Rank: 16Rank: 16Rank: 16Rank: 16
来 自:河北省曲阳县
等 级:版主
威 望:57
帖 子:713
专家分:556
注 册:2016-6-29
得分:0 
回复 20楼 laowan001
不是不需要用程序,而是不用我发到这个主题中的程序获得素数表。要用主题中的,从新设计一个程序来完成任务。

素数问题的解决是我学习编程永恒的动力。
2021-09-14 15:38
独木星空
Rank: 16Rank: 16Rank: 16Rank: 16
来 自:河北省曲阳县
等 级:版主
威 望:57
帖 子:713
专家分:556
注 册:2016-6-29
得分:0 
回复 21楼 吹水佬
关键是要用素数表,必须提前制作。就是用主题中的方法来制作素数表(我发了另一种制作素数表的程序,太慢了,无法满足要求)。

素数问题的解决是我学习编程永恒的动力。
2021-09-14 15:42
吹水佬
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
等 级:版主
威 望:432
帖 子:10064
专家分:41463
注 册:2014-5-20
得分:3 
回复 25楼 独木星空
是不是这样子

程序代码:
N = 100
DIMENSION arr[N,1]
arr = .T.
i = 2
DO WHILE i<=N
    FOR j=i+i TO N STEP i
        IF arr[j]
            arr[j] = .F.
        ENDIF 
    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 * FROM tt WHERE bol


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

2021-09-14 16:43
独木星空
Rank: 16Rank: 16Rank: 16Rank: 16
来 自:河北省曲阳县
等 级:版主
威 望:57
帖 子:713
专家分:556
注 册:2016-6-29
得分:0 
回复 26楼 吹水佬
是这种方式与处理结果。只不过这种没有分段,如果一次性处理一亿个数据,数组的长度有没有限制,即是没有限制,加大到10亿的数据量如何?最关键的是可能还大。所以必须改变一下,每次只处理一个固定周期内的数据,我给的数据源是9699690为周期的,里边有1658880个数据等待处理(一次性处理,不是一个一个的处理),每循环一个外循环值,数据源中的值加一个周期数9699690,进入第二个外循环,最里层的循环用mod(n,p)是否为0作为筛选条件(与其加它本身是一会事儿),在这个过程中,如果有被整除的就去掉了,不在进入下一个素数的排查之内。把最后一个待检验素数执行以后,判断最内层循环次数的奇偶性,找出那个是最终结果(数据a与数据b选其一,当然是正确的那个),把结果抄写到盛方素数的表中,此次外循环一次的数据处理完毕,进入第二轮即可。

素数问题的解决是我学习编程永恒的动力。
2021-09-14 17:12
吹水佬
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
等 级:版主
威 望:432
帖 子:10064
专家分:41463
注 册:2014-5-20
得分:0 
回复 27楼 独木星空
分段时,可用数组下标作为基址,加多个偏移量就可作为实际数据。
2021-09-14 17:43
吹水佬
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
等 级:版主
威 望:432
帖 子:10064
专家分:41463
注 册:2014-5-20
得分:0 
以下是引用独木星空在2021-9-14 17:12:09的发言:

如果一次性处理一亿个数据,数组的长度有没有限制

反正是用DBF来存放,直接用DBF代替数组好了,DBF的记录号就当是数组的下标,但DBF也是有限。
2021-09-14 19:17
独木星空
Rank: 16Rank: 16Rank: 16Rank: 16
来 自:河北省曲阳县
等 级:版主
威 望:57
帖 子:713
专家分:556
注 册:2016-6-29
得分:0 
现在编写出来个雏形,正在运行,看一看,运行结果如何,再发到网上,让大家提出宝贵意见,或者更好的优化方案。

素数问题的解决是我学习编程永恒的动力。
2021-09-14 20:00



参与讨论请移步原网站贴子:https://bbs.bccn.net/thread-506838-1-1.html




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

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