随意报出一个一亿10以内数字分解图的数字

(1)人口老龄化B (2分) (2)B (2分) (3)从农村流向城市、从贫困落后地区流向经济发达地区(答出一点即可给分)我国城乡和地区间在经济水平方面的巨大差别 &&(合理即给分)(2分)
(4)有利:弥补了人口流入地区劳动力的不足;提高了人口流入地区的城市化水平;缓解人口流出地区的就业压力;促进了人口流入地区与人口流出地区的经济社会交流。不利:加剧城市交通拥挤、住房紧张的状况;增加城市就业难度等(答出三点即可,合理即给分)(3分)
:本题主要考查我国的人口发展和我国的人口迁移的方向,对社会经济产生的影响。
请在这里输入关键词:
科目:高中地理
题型:阅读理解
资料1:《中国环境报》报道:1997年中国60岁以上的老人有1亿多人,占总人中的10%,到2040年预计将达2.5亿以上,占总人口的23.79%,60岁以上的人口数将是20岁左右人口数的2~3倍。
资料2:据在关部门统计,1984年我国农村剩余劳动力9485万人,到1994年上升到2亿人,2000年这一数字已增长到约3亿人。据估计这些人口中到少有四分之一以上涌入了大、中城市。
(1)资料1反映出,近年来我国人口发展中的一个突出问题是出现了&&&&&&&&& &现象,这一问题将会对我国经济发展和社会生活产生的影响是&&&&&&&&& &(选择填空)。
A.产业结构将从以第一、二产业为主,转变为以第三产业为主
B.青壮年劳动力在总人口中所占的比重下降
C.交通拥挤,住房紧张等城市环境问题会更加突出
D.国家的社会福利负担加重,造成人均GDP的明显下降
&& (2)资料2中问题产生的主要原因是&&&&&&&&& &(选择填空)。
①新中国成立以后我国人口始终以较高的速度持续增长
②我国人口众多,人均土地资源不足的矛盾日益突出
③农村经济的发展,使大批农业劳动力被从土地的束缚中解放出来
④我国已完成了从农业经济为主向以工业经济为主的转变
A.①② B.②③ C.③④ D.②④
&& (3)近20年中我国人口流动的主要方向是&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&
& &&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&,产生这种流动最根本的原因是&&&&&&&
&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&& &。
&& (4)简要回答我国大规模人口流动和迁移对社会经济产生的影响(从有利有弊两方面回答)&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&& &&
&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&& &。
科目:高中地理
来源:学年山西省临汾一中高一下学期期中考试地理试卷(带解析)
题型:综合题
阅读下列资料,分析回答有关问题:资料1:据日《中国环境报》报道:1997年中国60岁以上的老人有1亿多人,占总人中的10%,到2040年预计将达2.5亿以上,占总人口的23.79%,60岁以上的人口数将是20岁左右人口数的2-3倍。资料2:据有关部门统计,1984年我国农村剩余劳动力9485万人,到1994年上升到2亿人,2000年这一数字已增长到约3亿人。据估计这些人口中到少有四分之一以上涌入了大、中城市。(1)资料1反映出,近年来我国人口发展中的一个突出问题是出现了__________现象,这一问题将会对我国经济发展和社会生活产生的影响是(&&&)A.产业结构将从以第一、二产业为主,转变为以第三产业为主B.青壮年劳动力在总人口中所占的比重下降C.交通拥挤,住房紧张等城市环境问题会更加突出D.国家的社会福利负担加重,造成人均GDP的明显下降(2)资料2中问题产生的主要原因是(&&& )①新中国成立以后我国人口始终以较高的速度持续增长②我国人口众多,人均土地资源不足的矛盾日益突出③农村经济的发展,使大批农业劳动力被从土地的束缚中解放出来④我国已完成了从农业经济为主向以工业经济为主的转变A.①②& B.②③& C.③④& D.②④(3)近20年中我国人口流动的主要特点是____________________________________,产生这种流动最根本的原因是_____________________________________。(4)简要回答我国大规模人口流动和迁移对迁入地社会经济产生的影响。
科目:高中地理
来源:2014届山西省高一下学期期中考试地理试卷(解析版)
题型:综合题
阅读下列资料,分析回答有关问题:
资料1:据日《中国环境报》报道:1997年中国60岁以上的老人有1亿多
人,占总人中的10%,到2040年预计将达2.5亿以上,占总人口的23.79%,60岁以上的人
口数将是20岁左右人口数的2-3倍。
资料2:据有关部门统计,1984年我国农村剩余劳动力9485万人,到1994年上升到2亿人,
2000年这一数字已增长到约3亿人。据估计这些人口中到少有四分之一以上涌入了大、中
(1)资料1反映出,近年来我国人口发展中的一个突出问题是出现了__________现象,这
一问题将会对我国经济发展和社会生活产生的影响是(&&& )
A.产业结构将从以第一、二产业为主,转变为以第三产业为主
B.青壮年劳动力在总人口中所占的比重下降
C.交通拥挤,住房紧张等城市环境问题会更加突出
D.国家的社会福利负担加重,造成人均GDP的明显下降
(2)资料2中问题产生的主要原因是(&&& )
①新中国成立以后我国人口始终以较高的速度持续增长
②我国人口众多,人均土地资源不足的矛盾日益突出
③农村经济的发展,使大批农业劳动力被从土地的束缚中解放出来
④我国已完成了从农业经济为主向以工业经济为主的转变
A.①②& B.②③& C.③④& D.②④
(3)近20年中我国人口流动的主要特点是____________________________________,产生
这种流动最根本的原因是_____________________________________。
(4)简要回答我国大规模人口流动和迁移对迁入地社会经济产生的影响。
科目:高中地理
来源:2011年云南省高一下学期期中考试地理卷
题型:综合题
阅读下列资料,分析回答有关问题:(7分)
资料一:据日《中国环境报》报道:1997年中国60岁以上的老人有l亿多人,占总人中的10%,到2040年预计将达2.5亿以上,占总人口的23.79%,60岁以上的人口数将是20岁左右人口数的2~3倍。
资料二:据在关部门统计,1984年我国农村剩余劳动力9485万人,到1994年上升到2亿人.2000年这一数字已增长到约3亿人。据估计这些人口中到少有四分之一以上涌入了大、中城市。
(1)资料一反映出,近年来我国人口发展中的一个突出问题是出现了&&&&&&&&&&&
现象,这一问题将会对我国经济发展和社会生活产生的影响是 &&&&&&&&&&&(选择填空)。
A.产业结构将从以第一、二产业为主,转变为以第三产业为主
B.青壮年劳动力在总人口中所占的比重下降
C.交通拥挤,住房紧张等城市环境问题会更加突出
D.国家的社会福利负担加重,造成人均GDP的明显下降
(2)资料二中问题产生的主要原因是&& &&&&&&&(选择填空)。
①新中国成立以后我国人口始终以较高的速度持续增长
②我国人口众多,人均土地资源不足的矛盾日益突出
③农村经济的发展,使大批农业劳动力被从土地的束缚中解放出来
④我国已完成了从农业经济为主向以工业经济为主的转变
A.①②&&& B.②③&&& C.③④&&&
D.②④
(3)近20年中我国人口流动的主要方向是
,产生这种流动最根本的原因是&&&&&&&&&&&&&&&&&&&

(4)简要回答我国大规模人口流动和迁移对社会经济产生的影响从有利和不利两方面回答。(2分)
精英家教网新版app上线啦!用app只需扫描书本条形码就能找到作业,家长给孩子检查作业更省心,同学们作业对答案更方便,扫描上方二维码立刻安装!
作业讨论群:这是个机器人猖狂的时代,请输一下验证码,证明咱是正常人~大数的认识 第一课时亿以内数的读法_百度文库
两大类热门资源免费畅读
续费一年阅读会员,立省24元!
大数的认识 第一课时亿以内数的读法
上传于||暂无简介
阅读已结束,如果下载本文需要使用5下载券
想免费下载本文?
定制HR最喜欢的简历
下载文档到电脑,查找使用更方便
还剩7页未读,继续阅读
定制HR最喜欢的简历
你可能喜欢找出一亿以内的质数,看谁写的程序最快|交流区 - 梅子Visual FoxPro 编程 - Powered by phpwind
查看完整版本: [--
&Pages: ( 2 total )
找出一亿以内的质数,看谁写的程序最快
近来在玩个数字游戏,自己编程找出一亿以内的所有质数,最后输出到DBF表中,现在测试之中,稍后报告所需的时间(秒),有兴趣的朋友不妨也试试,也可以当作测试机器速度的参考..
我用C语言编的应该比VF运行要快吧。
是不是生成EXE文件比在VFP中较快些?我现在已经跑了一个多钟啦,还没结果!原来一亿是很大的一个数了,有钱人有几亿身家,哪花得了..
跑出来了,花了5940秒,共找到5761455个质数,最大是.我的机器是IBM T43 BH4 (Pm 1.86M/512M ),准备再优化一下程序,看看能否再省点时间.
[此贴子已经被作者于 22:34:14编辑过]
你可以定为10W以内的,大家才有时间测试!
10W以内太快了,100W才12秒,很难反映出效率!到时大家拿贴出源程序,到相同的机器才能比较出快慢.
这是:
1、算法问题。
2、C或宏汇编写的肯定比VFP快很多。
3、楼主贴一段代码上来,别人运行一下,就能够比较机器速度快慢了。没必要分头写。不同的代码拿来比较机器,无意义。
估计用筛法比较快。
数据太大,俺的爱机不敢试,要保护硬盘[s:04]
花了161秒,共找到个质数,最大是
以下是引用chxt在 09:55:49的发言:花了161秒,共找到个质数,最大是
错了吗?能有这么多?!!!
以下是引用Motor在 21:38:43的发言:
跑出来了,花了5940秒,共找到5761455个质数,最大是.我的机器是IBM T43 BH4 (Pm 1.86M/512M ),准备再优化一下程序,看看能否再省点时间.
我的答案与楼主相同。我重新优化以后:
1000000
以内的质数个数是 78498 个,用时 10.054 秒 以内的质数个数是 664579个,用时 204.942 秒1亿以内的时间正在运行
运行结果出来了,共 5761455个质数,运行时间是 秒。
好象比楼主前面的快一些。
以下是引用hjm在 10:42:41的发言:
感兴趣,想了将近一天,速度比楼上说的稍慢一些,不知是机子还是程序原因,我已想不出优化办法了。
参数为6(一百万内)耗时大约11秒,参数为7(一千万内)耗时大约220秒,没有时间测试一亿。
---------------------------------------------------------
PARAMETERS zdszsSET TALK OFF
IF TYPE(\"zdszs\")#\"N\".or.zdszs&1.or.zdszs&8
?\"参数范围1~8\"
RETURNENDIFnmax=10^zdszszdxys=INT(SQRT(nmax))
sj0=SECONDS()?\"正在查找\"+ALLTRIM(STR(nmax))+\"以内的质数...\"
CREATE CURSOR zsb(zs n(LEN(ALLTRIM(STR(nmax)))))FOR n=2 TO zdxys
zzs=SQRT(n)
FOR i=2 TO zzs
IF MOD(n,i)=0
INSERT INTO zsb(zs) VALUES(n)
ENDIFENDFOR*SELECT zs as xyzs FROM zsb INTO CURSOR xysb &&不知是不是字段宽度有多余的原因,以下三句建的xysb表好象要快一点COPY TO ARRAY axysCREATE CURSOR xysb(xyzs n(LEN(ALLTRIM(STR(zdxys)))))APPEND FROM ARRAY axys
FOR n=zdxys+IIF(MOD(zdxys,2)=0,1,2) TO nmax STEP 2
LOCATE FOR MOD(n,xyzs)=0
IF !FOUND()
INSERT INTO zsb(zs) VALUES(n)
ENDIFENDFOR
??\"总数:\"+ALLTRIM(STR(RECCOUNT(\"zsb\")))+\"
最大:\"+ALLTRIM(STR(zsb.zs))+\"
耗时:\"+ALLTRIM(STR(SECONDS()-sj0,15,3))+\"秒\"
---------------------------------------------------------------
LOCATE FOR MOD(n,xyzs)=0还有多余操作,实际上不需要遍历所有记录,到xyzs&sqrt(n)后就可不再搜索了。但建索引使用while子句后反而更慢(好象是不能Rushmore的原因),不知大家有没有办法解决。
我试了参数6,运行时间是13.633 秒
以下是引用hjm在 14:57:43的发言:
楼上能将代码贴出来学习一下吗?
前段质数的查找当然也可忽略偶数,即先INSERT INTO zsb(zs) VALUES(2),然后FOR n=3 TO zdxys step 2...参数为6时几乎没什么影响,但参数是7时能省几秒,数字更多时应该省更多,但优化的关键不在这里,不知道能否对后面的LOCATE FOR MOD(n,xyzs)=0再想点办法,我试过循环查找等办法,但都变得更慢了。
先不急,以后会公布的!
你也是个算法高手,你的算法很有借鉴意见!!!
不过,我的算法可比你的简单高效得多,我还在想办法优化。
以下是引用hjm在 10:42:41的发言:
感兴趣,想了将近一天,速度比楼上说的稍慢一些,不知是机子还是程序原因,我已想不出优化办法了。
参数为6(一百万内)耗时大约11秒,参数为7(一千万内)耗时大约220秒,没有时间测试一亿。
---------------------------------------------------------
PARAMETERS zdszsSET TALK OFF
IF TYPE(\"zdszs\")#\"N\".or.zdszs&1.or.zdszs&8
?\"参数范围1~8\"
RETURNENDIFnmax=10^zdszszdxys=INT(SQRT(nmax))
sj0=SECONDS()?\"正在查找\"+ALLTRIM(STR(nmax))+\"以内的质数...\"
CREATE CURSOR zsb(zs n(LEN(ALLTRIM(STR(nmax)))))FOR n=2 TO zdxys*
zzs=SQRT(n)
FOR i=2 TO zzs
IF MOD(n,i)=0
INSERT INTO zsb(zs) VALUES(n)
ENDIFENDFOR*SELECT zs as xyzs FROM zsb INTO CURSOR xysb &&不知是不是字段宽度有多余的原因,以下三句建的xysb表好象要快一点COPY TO ARRAY axysCREATE CURSOR xysb(xyzs n(LEN(ALLTRIM(STR(zdxys)))))APPEND FROM ARRAY axys
FOR n=zdxys+IIF(MOD(zdxys,2)=0,1,2) TO nmax STEP 2
LOCATE FOR MOD(n,xyzs)=0
IF !FOUND()
INSERT INTO zsb(zs) VALUES(n)
ENDIFENDFOR
??\"总数:\"+ALLTRIM(STR(RECCOUNT(\"zsb\")))+\"
最大:\"+ALLTRIM(STR(zsb.zs))+\"
耗时:\"+ALLTRIM(STR(SECONDS()-sj0,15,3))+\"秒\"
---------------------------------------------------------------
LOCATE FOR MOD(n,xyzs)=0还有多余操作,实际上不需要遍历所有记录,到xyzs&sqrt(n)后就可不再搜索了。但建索引使用while子句后反而更慢(好象是不能Rushmore的原因),不知大家有没有办法解决。
一半就够了吧?10^6次方24.452秒
[此贴子已经被作者于 15:52:45编辑过]
可不可以这样,先放到临时表,删除能被2整除的,再删除能被3整除的,再删除能被5整除的,这样,一下来就去掉了很多记录.再在这基础上判断是否是符合质数的条件?
以下是引用chxt在 09:55:49的发言:花了161秒,共找到个质数,最大是
97 =77101
clear allclose allt1=datetime()dime ax(6000000)
ax(1)=2ax(2)=3ax(3)=5ax(4)=7ax(5)=11k=6for i=13 to
mod(i,3)=0 or mod(i,5)=0 or mod(i,7)=0
loop endif b=sqrt(i) for j=5 to 6000000
mod(i,ax(j))=0
if ax(j)&b
endif endforendforcreate table zs1 (zs n(7))&& APPEND FROM ARRAY ax
奇怪,这里为什么不能用数组导入数据?只能导入一条,没办法,只能用下面逐个插入。for i=1 to k-1 insert into zs1 values(ax(i))endforrelease axms=\'查找完成,总共花了\'+str(datetime()-t1)+\' 秒时间\'messagebox(ms,48,\'\')
目前是zxs秒最快
请问zxs4785机器配置如何?我用相同的程序,在这单核的IBM Pm 1.86本本运行更快,在办公室一台TCL
P d 2.8G/1G双核的机器却跑得更慢,运行其它程序也是感觉不快,我现在怀疑AMD公司说INTEL公司的双核蕊片是假的是很有根据的,我经常在观察两个CPU运行状态图(任务管理器),发觉两个CPU的图例几乎很相似,那有这可能啊,我另一台DELL双至强CPU的服务器,运行时CPU1相对比较繁忙,对于一般任务都是CPU1在运行,CPU2一般在处理数据库时运行才比较明显...
以下是引用hjm在 17:39:53的发言:
改用逐步添加校验数后,避开了一些多余检测,再处理了一些细节,现在应该与zxs4785在12楼时相当了(如果那个比例可靠的话数据大时好象还要快一些)。
由于昨天上不了论坛,还是在那个机子(比zxs4785用的要快不少)反复测试了多次,下面报出的是独占机器的运行时间:
10^6:8.2秒左右,偶尔出现过不到这个时间。
10^7:154秒左右,偶尔出现过不到这个时间。
10^8:3327秒,后来有个细节修改后没有测试(10^7能省8秒左右,10^8应该能省上百秒),另外还测试了一次,由于机子做了其他事,耗时3441秒。
--------------------------------------------
PARAMETERS zdszsIF TYPE(\"zdszs\")#\"N\".or.zdszs&1.or.zdszs&8
MESSAGEBOX(\"参数范围1~8\",16,\"无效参数\")
RETURNENDIFSET TALK OFFSET ESCAPE OFFnmax=10^zdszs?TIME()+\"开始查找\"+ALLTRIM(STR(nmax))+\"以内的质数...\"sj0=SECONDS()
CREATE CURSOR zsb(zs n(LEN(ALLTRIM(STR(nmax)))))INSERT INTO zsb(zs) VALUES(2)CREATE CURSOR xysb(xys n(LEN(ALLTRIM(STR(SQRT(nmax))))))pfs=3^2FOR n=3 TO nmax STEP 2
GO RECCOUNT(\"xysb\")+2 IN zsb
INSERT INTO xysb(xys) VALUES(zsb.zs)
SKIP IN zsb
pfs=zsb.zs^2
LOCATE FOR EMPTY(MOD(n,xys))
IF !FOUND()
INSERT INTO zsb(zs) VALUES(n)
ENDIFENDFOR
GO BOTTOM in zsb??=\"总数:\"+ALLTRIM(STR(RECCOUNT(\"zsb\")))+\"
最大:\"+ALLTRIM(STR(zsb.zs))+\"
耗时:\"+ALLTRIM(STR(SECONDS()-sj0,15,3))+\"秒\"--------------------------------------------
就我这个思路来说,感觉速度已经到头了,除非还有更高效的命令或函数,但我不知道。
希望能看到大家更好的办法!
你用的是什么机啊?我用你这段程序,10^6跑了几次,大约7.5秒,我是IBM Pm 1.86G/512M 的本本..很快的程序,还看不懂你的思路,慢慢研究........有点看明白了,程序原理基本跟我的程序差不多,只是不明白,我用循环比较数组的速度居然比LOCATE FOR 慢很多..
[此贴子已经被作者于 23:11:05编辑过]
LOCAL objPrime AS ClsPrime
?? \"用依次相除的方法算质数 - 小布丁\"objPrime = NEWOBJECT(\"ClsPrime\")? objPrime.CreatePrime(5)SELECT curPrimeBROWSEIF MESSAGEBOX(\"继续运行吗?\", 4+32+256) != 6 THEN
CANCELENDIF? objPrime.CreatePrime(6)SELECT curPrimeBROWSEIF MESSAGEBOX(\"继续运行吗?\", 4+32+256) != 6 THEN
CANCELENDIF? objPrime.CreatePrime(7)SELECT curPrimeBROWSEIF MESSAGEBOX(\"继续运行吗?\", 4+32+256) != 6 THEN
CANCELENDIF? objPrime.CreatePrime(8)SELECT curPrimeBROWSE*!* SELECT curDiv*!* BROWSE
DEFINE CLASS ClsPrime AS CUSTOM
PROTECTED intN AS INTEGER
PROTECTED intMaxNumber AS LONG
PROTECTED PROCEDURE
INIT() AS LOGICAL
SET TALK OFF
SET ESCAPE OFF
SET DELETED ON
THIS.intN = 8
PROCEDURE CreatePrime(intN AS INTEGER) AS Logical
LOCAL intFlag AS LONG, intTemp AS LONG, intMaxDiv AS LONG
LOCAL intCount AS LONG
DIMENSION arrAdd(8) AS INTEGER
? \"开始时间:\"
arrAdd(1) = 1
arrAdd(2) = 7
arrAdd(3) = 11
arrAdd(4) = 13
arrAdd(5) = 17
arrAdd(6) = 19
arrAdd(7) = 23
arrAdd(8) = 29
fltStart = SECONDS()
IF VARTYPE(intN) = \"N\" THEN
THIS.intN = intN
THIS.intMaxNumber = 10 ^ THIS.intN
CREATE CURSOR curPrime(primeNumber N(THIS.intN + 1))
CREATE CURSOR curDiv(divNumber N(INT(THIS.intN / 2) + 1))
THIS.InsertFirstNumber()
*!* 被除数
INSERT INTO curDiv (divNumber) VALUES (7)
intNowMaxDiv = 7
&& 当前最大除数
intPointCurPrime = 4
&& curPrime 指针,指向当前 curDiv 值所在位置
FOR intFlag = 30 TO THIS.intMaxNumber STEP 30
intMaxDiv = INT(SQRT(intFlag + 29))
IF intMaxDiv & intNowMaxDiv THEN
SELECT curPrime
GO intPointCurPrime + 1
IF curPrime.primeNumber &= intMaxDiv THEN
*!* 如果下一个质数小于或等于 intMaxDiv, 则加入除数序列
INSERT INTO curDiv (divNumber) VALUES (curPrime.primeNumber)
intNowMaxDiv = curPrime.primeNumber
intPointCurPrime = intPointCurPrime + 1
SELECT curDiv
FOR intArrFlag = 1 TO 8
intTemp = intFlag + arrAdd(intArrFlag)
LOCATE FOR MOD(intTemp, curDiv.divNumber) = 0
IF NOT FOUND() THEN
INSERT INTO curPrime (primeNumber) VALUES (intTemp)
fltEnd = SECONDS()
DELETE FROM curPrime WHERE primeNumber &= THIS.intMaxNumber
SELECT curPrime
COUNT TO intCount
? \"结束时间:\"
? \"估计用时:\"
?? fltEnd - fltStart
RETURN(intCount)
HIDDEN PROCEDURE InsertFirstNumber() AS Logical
*!* 小于 30
*!* 2 / 3 / 5 / 7 / 11 / 13 / 17 / 19 / 23 / 29
INSERT INTO curPrime (primeNumber) VALUES (2)
INSERT INTO curPrime (primeNumber) VALUES (3)
INSERT INTO curPrime (primeNumber) VALUES (5)
INSERT INTO curPrime (primeNumber) VALUES (7)
INSERT INTO curPrime (primeNumber) VALUES (11)
INSERT INTO curPrime (primeNumber) VALUES (13)
INSERT INTO curPrime (primeNumber) VALUES (17)
INSERT INTO curPrime (primeNumber) VALUES (19)
INSERT INTO curPrime (primeNumber) VALUES (23)
INSERT INTO curPrime (primeNumber) VALUES (29)
RETURN(.T.)
ENDPROCENDDEFINE
目前是HJM的速度最快,100W才7点多秒.....
请楼主帮我测我运行时间:
?\"正在进行扫描质数运算...\"Qzs(1000000)
PROCEDURE qzsPARAMETERS nmaxtt1=SECONDS()SET SAFETY OFF
CREATE TABLE szsb (质数 I)INSERT INTO szsb (质数) VALUES (2)INSERT INTO szsb (质数) VALUES (3)nrec=1npf=5*5FOR i=5 TO nmax STEP 2 IF i=npf
nrec=nrec+1
npf=质数**2
LOOP ENDIF
lyes=.T. GO 2 SCAN
MOD(i,质数)=0
INSERT INTO szsb (质数) VALUES (i) ENDIFENDFORtt2=SECONDS()?tt1?tt2GO BOTTOM? nmax,\"以内的质数个数:\",RECCOUNT(),\"最大质数:\",质数,\"用时:\",tt2-tt1CLOSE DATABASESENDPROC
奇怪的是,跑完HJM的程序再跑我的程序,居然我的算法就慢了很多,不明白!!!明的了,原来HJM的程序没关闭数据表。
[此贴子已经被作者于 09:32:30编辑过]
我这样改后现快,请楼主测试
?\"正在进行扫描质数运算...\"Qzs(1000000)
PROCEDURE qzsPARAMETERS nmaxtt1=SECONDS()SET SAFETY OFF
SET TALK OFFCREATE TABLE szsb (质数 I)INSERT INTO szsb (质数) VALUES (2)INSERT INTO szsb (质数) VALUES (3)nrec=1npf=5*5FOR i=5 TO nmax STEP 2IF i=npf
nrec=nrec+1
npf=质数**2
LOOPENDIF GO 2LOCATE NEXT nrec FOR MOD(i,质数)=0IF not FOUND()
INSERT INTO szsb (质数) VALUES (i)ENDIFENDFORtt2=SECONDS()?tt1?tt2GO BOTTOM? nmax,\"以内的质数个数:\",RECCOUNT(),\"最大质数:\",质数,\"用时:\",tt2-tt1CLOSE DATABASESENDPROC
[此贴子已经被作者于 09:43:28编辑过]
有人用其它语言试了吗
以下是引用mwia在 10:09:09的发言:有人用其它语言试了吗
我有个网友,他说用DELPHI写的算法(不知是不是他写的,且质数没保存),扫描到一亿才用二十多秒,没法子,VFP在数值运算上的效率的确j是差得多了。
在我的机子上,“empty(MOD(i,质数))”比“MOD(i,质数)=0”要慢很多。
我的机子配置,AMD 3000+,256M内存,WINXP SP2,SATA 80G硬盘
不知道还能不能实现比这更快的算法,怎么不见楼主出来测试了。
DELPHI写的算法,据说算到1亿只用二十几秒。
procedure Sieve(n: var Primes: TIntegerDynArray);var
isPrime: array of B
i, j, PrimeCount:begin
SetLength(isPrime, n + 1);
for i := 2 to n do
isPrime := TRUE;
for i := 2 to Ceil(Sqrt(n)) do
if isPrime then
for j := i to n do
if j * i & n then
isPrime[j * i] := F
PrimeCount := 0;
if n & 100 then
SetLength(Primes, n)
SetLength(Primes, n div 4);
for i := 0 to n do
if isPrime then
Primes[PrimeCount] :=
Inc(PrimeCount);
SetLength(Primes, PrimeCount);
procedure TfrmSieveForm.btn1Click(Sender: TObject);var
Primes: TIntegerDynA
mTime: DWORD;begin
Screen.Cursor := crHourG
n := StrToInt(edt1.Text);
if (n &= ) then
Application.MessageBox(\'超出32位整数范围!\', PChar(Self.Caption), MB_OK +
MB_ICONINFORMATION + MB_TOPMOST);
//开始筛选
mTime := GetTickC
//筛选函数
Sieve(n, Primes);
mTime := GetTickCount - mT
//筛选结速
//显示结果
mmo1.Lines.BeginU
if chk1.Checked then
for i := 0 to Length(Primes) - 1 do
mmo1.Lines.Add(IntToStr(Primes));
mmo1.Lines.EndU
//素数总数
edtCount.Text := IntToStr(Length(Primes));
//运算时间
Edit1.Text := IntToStr(mTime);
Edit2.Text := IntToStr(Primes[Length(Primes)-1]);
Screen.Cursor := crD
Application.MessageBox(\'筛选完毕.\', PChar(Self.Caption), MB_OK +
MB_ICONINFORMATION + MB_TOPMOST);
此算法比我前面的算法还耗时!!!
以下是引用hjm在 16:01:23的发言:
在办公室机子上又对47楼代码进行了多次测试,确实要快些:
10^6:约6.25秒。
10^7:约129.8秒。
10^8:利用中午下班时间测了一次,2822秒。
39楼代码上午也测过一次一亿,中途只调用过一篇Word文档来打印,耗时2923秒。
目前是你的程序最快了,我正在想办法优化程序,估计很难破你这个速度..
clear allclose allt1=second()dime ax(6000000)ax(1)=2ax(2)=3ax(3)=5ax(4)=7k=5xj=3sp=25for i=11 to 100000 step 2if mod(i,5)=0 or mod(i,3)=0 or mod(i,7)=0
loopendifif i&sp
sp=ax(xj)^2endiffor j=5 to xj
mod(i,ax(j))=0
endifendforif j&xj
k=k+1endifendforcreate table zs1 (zs n(7))for i=1 to k-1insert into zs1 values(ax(i))endforrelease axms=\'查找完成,总共花了\'+str(seconds()-t1,5,2)+\' 秒时间\'messagebox(ms,48,\'\')
这是最新的,测试跟HJM差不多,但还不能超过HJM...
[此贴子已经被作者于 23:49:16编辑过]
以下是引用Motor在 23:27:25的发言:
clear allclose allt1=second()dime ax(6000000)ax(1)=2ax(2)=3ax(3)=5ax(4)=7k=5xj=3sp=25for i=11 to 100000 step 2if mod(i,5)=0 or mod(i,3)=0 or mod(i,7)=0
loopendifif i&sp
sp=ax(xj)^2endiffor j=5 to xj
mod(i,ax(j))=0
endifendforif j&xj
k=k+1endifendforcreate table zs1 (zs n(7))for i=1 to k-1insert into zs1 values(ax(i))endforrelease axms=\'查找完成,总共花了\'+str(seconds()-t1,5,2)+\' 秒时间\'messagebox(ms,48,\'\')
这是最新的,测试跟HJM差不多,但还不能超过HJM...
我测试了,一百万时运行9.40秒,比我们前面的差了至少两秒,如此一来,到一亿时至少慢800秒
我也来一个,只查到10^7,时间是9.76秒。
Dime IsNotPrime() as long
t1=SECONDS()IsNotPrime(1) = .t.For i = 4 To
Step 2IsNotPrime(i) = .t.ENDFORk = Sqrt()For i = 3 To k Step 2If IsNotPrime(i)=.f.For j = i * i To
Step i * 2
IsNotPrime(j) = .t.ENDFORENDIFENDFOR
ms=\'查找完成,总共花了\'+str(seconds()-t1,5,2)+\' 秒时间\'messagebox(ms,48,\'\')*列出最后几个素数For i =
- 100 To If IsNotPrime(i) = .f.? iENDIF
ENDFOR
[此贴子已经被作者于 18:55:11编辑过]
改了一下,成8.65秒了
k = int(Sqrt())
以下是引用vfp2006在 18:50:45的发言:
我也来一个,只查到10^7,时间是9.76秒。
Dime IsNotPrime() as long
t1=SECONDS()IsNotPrime(1) = .t.For i = 4 To
Step 2IsNotPrime(i) = .t.ENDFORk = Sqrt()For i = 3 To k Step 2If IsNotPrime(i)=.f.For j = i * i To
Step i * 2
IsNotPrime(j) = .t.ENDFORENDIFENDFOR
ms=\'查找完成,总共花了\'+str(seconds()-t1,5,2)+\' 秒时间\'messagebox(ms,48,\'\')*列出最后几个素数For i =
- 100 To If IsNotPrime(i) = .f.? iENDIF
ENDFOR
传说中的极品飞车?妙,绝!
[此贴子已经被作者于 10:02:43编辑过]
以下是引用vfp2006在 18:50:45的发言:
我也来一个,只查到10^7,时间是9.76秒。
Dime IsNotPrime() as long
t1=SECONDS()IsNotPrime(1) = .t.For i = 4 To
Step 2IsNotPrime(i) = .t.ENDFORk = Sqrt()For i = 3 To k Step 2If IsNotPrime(i)=.f.For j = i * i To
Step i * 2
IsNotPrime(j) = .t.ENDFORENDIFENDFOR
ms=\'查找完成,总共花了\'+str(seconds()-t1,5,2)+\' 秒时间\'messagebox(ms,48,\'\')*列出最后几个素数For i =
- 100 To If IsNotPrime(i) = .f.? iENDIF
ENDFOR
高. .. Dime IsNotPrime() as long
VFP中,数组下标能定义这么大? 还没试过呢.
vfp对于计算类型的运算速度确实不行,且数组有限制,搞10^8得分组。
同样的代码转成vb,找10^8中素数,vb中只花了11.5秒。
vb测试程序见下.[attachment=28894]
原理很简单:
设置每一个数为非质数,在2*i循环里面就不再检查了。
正如&&功夫&&一样,最强的高手总是在最后面出现,佩服佩服,看来很难再有超过这个极限了,即使在这个算法基础再对程序优化一下,相信也快不了多少..[s:17]
看看差距还有这么大吗?
以下是10^7vb测试程序,不到1秒钟,vc中处理10^8只用0.002秒,各语言之间确实有差别的.
[attachment=28941]
Dime IsNotPrime() as long
local kt1=SECONDS()IsNotPrime(1) = .t.For i = 4 To
Step 2IsNotPrime(i) = .t.ENDFORk = int(Sqrt())For i = 3 To k Step 2If IsNotPrime(i)=.f.For j = i * i To
Step i * 2
IsNotPrime(j) = .t.ENDFORENDIFENDFOR
ms=\'查找完成,总共花了\'+str(seconds()-t1,5,2)+\' 秒时间\'messagebox(ms,48,\'\')*列出最后几个素数For i =
- 100 To If IsNotPrime(i) = .f.? iENDIF
ENDFOR能再少0.5左右秒的时间.
以下是引用vfp2006在 21:44:33的发言:
Dime IsNotPrime() as long
local kt1=SECONDS()IsNotPrime(1) = .t.For i = 4 To
Step 2IsNotPrime(i) = .t.ENDFORk = int(Sqrt())For i = 3 To k Step 2If IsNotPrime(i)=.f.For j = i * i To
Step i * 2
IsNotPrime(j) = .t.ENDFORENDIFENDFOR
ms=\'查找完成,总共花了\'+str(seconds()-t1,5,2)+\' 秒时间\'messagebox(ms,48,\'\')*列出最后几个素数For i =
- 100 To If IsNotPrime(i) = .f.? iENDIF
ENDFOR能再少0.5左右秒的时间.
算法的确是最优秀的,但不是实用的程序,如算到一亿得分组。结合此算法,我重写一个,算到一亿用520秒左右,比以前快得多了。??\"正在进行扫描质数运算...\"Qzs()
PROCEDURE qzsPARAMETERS nmaxlocal ktt1=SECONDS()SET SAFETY OFFSET TALK OFFSET DELETED ONCREATE CURSOR zsb (zs I)CREATE CURSOR szsb (notzs L)FOR i=1 TO nmax INSERT INTO szsb (notzs) VALUES (.F.)ENDFOR
GO TOPREPLACE notzs WITH .T.
For i = 4 To nmax Step 2 GO i REPLACE notzs WITH .T.ENDFORk = int(Sqrt(nmax))For i = 3 To k Step 2 GO i IF NOT notzs
For j = i * i To nmax Step i * 2
REPLACE notzs WITH .T.
ENDFOR ENDIFENDFOR
GO topSCAN FOR NOT notzs APPEND BLANK IN zsb REPLACE zs WITH RECNO(\"szsb\") IN zsbENDSCANtt2=SECONDS()?tt1?tt2USE ? nmax,\"以内的质数个数:\",RECCOUNT(\"zsb\"),\"最大质数\",zsb.zs,\"用时:\",tt2-tt1ENDPROC
[此贴子已经被作者于 22:13:56编辑过]
用\"zxs4785\"代码运行了545秒,用\"vfp2006\"数组代码运行1000秒还未运行完。\"vfp2006\"原先更改\"zxs4785\"代码不是用数组的,运行只需458秒!!!
再测试一下,我的机子是vfp6:222秒,vfp7:214秒,vfp9:227秒,改一条语句,快了150秒左右
??\"正在进行扫描质数运算...\"Qzs()
PROCEDURE qzsPARAMETERS nmaxlocal ktt1=SECONDS()SET SAFETY OFFSET TALK OFFSET DELETED ONCREATE CURSOR zsb (zs I)CREATE CURSOR szsb (notzs L)FOR i=1 TO nmax *INSERT INTO szsb (notzs) VALUES (.F.)APPEND BLANKENDFOR
GO TOPREPLACE notzs WITH .T.
For i = 4 To nmax Step 2GO iREPLACE notzs WITH .T.ENDFORk = int(Sqrt(nmax))For i = 3 To k Step 2GO iIF NOT notzs
For j = i * i To nmax Step i * 2
REPLACE notzs WITH .T.
ENDFORENDIFENDFOR
GO topSCAN FOR NOT notzsAPPEND BLANK IN zsbREPLACE zs WITH RECNO(\"szsb\") IN zsbENDSCANtt2=SECONDS()?tt1?tt2USE ? nmax,\"以内的质数个数:\",RECCOUNT(\"zsb\"),\"最大质数\",zsb.zs,\"用时:\",tt2-tt1ENDPROC
[此贴子已经被作者于 22:54:30编辑过]
查看完整版本: [--
Powered by
Time 0.056580 second(s),query:3 Gzip enabled}

我要回帖

更多关于 随意说出一个数字 的文章

更多推荐

版权声明:文章内容来源于网络,版权归原作者所有,如有侵权请点击这里与我们联系,我们将及时删除。

点击添加站长微信