设为首页收藏本站|繁體中文

Project1

 找回密码
 注册会员
搜索
12
返回列表 发新帖
楼主: xgm
打印 上一主题 下一主题

新人练习脚本产物

 关闭 [复制链接]
头像被屏蔽

Lv1.梦旅人 (禁止发言)

梦石
0
星屑
50
在线时间
0 小时
注册时间
2005-10-22
帖子
89
11
 楼主| 发表于 2007-5-26 06:06:13 | 只看该作者
提示: 作者被禁止或删除 内容自动屏蔽
签名被屏蔽
回复 支持 反对

使用道具 举报

Lv2.观梦者

梦石
0
星屑
280
在线时间
1374 小时
注册时间
2005-10-16
帖子
5113

贵宾

12
发表于 2007-5-26 07:02:47 | 只看该作者
以下引用美兽于2007-5-25 19:28:54的发言:

这么几个字写了半个多小时,
使用的是古老的筛选法,
50000运行时间为0.0903s
在我机器上10s上限大约450万,
理论上仍有提升的空间,
有空再试吧......


M = 50000
t1 = Time.now
max = (M+1)/2
@date = Array.new(max)
for x in 1..max
@date[x] = (x << 1) - 1
end
m2 = max + 1
for i in 2..max
   next unless @date
   j = i + @date
   while j < m2
      @date[j] = nil
      j += @date
   end
end
@date.compact!   
t2 = Time.now
p t2-t1
p @date

看了一个多小时终于明白了....排除法~~~{/qiang}
如果通过一个数组来记录对应位数字是否为质数的真假值,最终根据这些真假值数组来重新生成一个真正的质数数组的话....

不过写完以后才发现这个更适合用做判断一个数是否为质数.....

我的机器上计算算不到4500000....  -v-|

  1. def getzs(range)
  2.   zs = Array.new(range,true)
  3.   zs[1] = false
  4.   t = Time.now
  5.   r = Math.sqrt(range).ceil
  6.   for i in 1..r
  7.     if zs[i]
  8.       j = 2 * i
  9.       while j <= range
  10.         zs[j] = false
  11.         j += i
  12.       end
  13.     end
  14.   end
  15.   result = []
  16.   for i in 1..range
  17.     result.push(i) if zs[i]
  18.   end
  19.   p Time.now - t
  20.   return result
  21. end
复制代码
我只个搬答案的
叔叔我已经当爹了~
婚后闪人了……
回复 支持 反对

使用道具 举报

Lv1.梦旅人

梦石
0
星屑
50
在线时间
0 小时
注册时间
2006-10-25
帖子
661
13
发表于 2007-5-27 00:24:04 | 只看该作者
好好學習!
回复 支持 反对

使用道具 举报

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

本版积分规则

拿上你的纸笔,建造一个属于你的梦想世界,加入吧。
 注册会员
找回密码

站长信箱:[email protected]|手机版|小黑屋|无图版|Project1游戏制作

GMT+8, 2024-11-23 19:44

Powered by Discuz! X3.1

© 2001-2013 Comsenz Inc.

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