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

Project1

 找回密码
 注册会员
搜索
查看: 4579|回复: 12
打印 上一主题 下一主题

新人练习脚本产物

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

Lv1.梦旅人 (禁止发言)

梦石
0
星屑
50
在线时间
0 小时
注册时间
2005-10-22
帖子
89
跳转到指定楼层
1
发表于 2007-5-23 05:13:02 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
提示: 作者被禁止或删除 内容自动屏蔽
签名被屏蔽
头像被屏蔽

Lv1.梦旅人 (禁止发言)

梦石
0
星屑
50
在线时间
0 小时
注册时间
2005-10-22
帖子
89
2
 楼主| 发表于 2007-5-23 05:13:02 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
提示: 作者被禁止或删除 内容自动屏蔽
签名被屏蔽

Lv1.梦旅人

梦石
0
星屑
55
在线时间
2 小时
注册时间
2006-11-10
帖子
931
3
发表于 2007-5-23 05:15:47 | 只看该作者
以下引用xgm于2007-5-22 21:13:02的发言:


PS:上限最好不要太大,RM默认10秒就挂,我的机器9秒才能算35000上限的……

估计着时间快要到的时候Graphics.update一下就可以不用挂吧{/fd}
……………………啊咧?
回复 支持 反对

使用道具 举报

头像被屏蔽

Lv1.梦旅人 (禁止发言)

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

使用道具 举报

Lv2.观梦者

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

贵宾

5
发表于 2007-5-23 15:08:52 | 只看该作者
for i in $zs[$zs.size - 1] + 1..q #获取质数的范围
   for p in $zs #依次将质数列表里的数带入p
     if i % p != 0 #如果不能整除
       if p == $zs[$zs.size - 1] #如果p为目前指数列表的最后
         $zs[$zs.size] = i #将i写入
       end
     else #如果能整除
       break
     end
   end
   if Time.now - t1 > 9 #当程序快挂时刷新画面
     t1 = Time.now
     Graphics.update
   end

如果第二个循环里就有几万个数字的话,还运行不到判断这里,就已经挂了....


for i in $zs[$zs.size - 1] + 1..q #获取质数的范围
   for p in $zs #依次将质数列表里的数带入p
     Graphics.update
     if i % p != 0 #如果不能整除
       if p == $zs[$zs.size - 1] #如果p为目前指数列表的最后
         $zs[$zs.size] = i #将i写入
       end
     else #如果能整除
       break
     end
   end

也可以这样求稳,无非是慢一些,但绝对不会卡死....
你可以再做个显示进度的窗口,这样就不至于对着黑黑的屏幕发呆了......
我只个搬答案的
叔叔我已经当爹了~
婚后闪人了……
回复 支持 反对

使用道具 举报

Lv1.梦旅人

月下可怜人

梦石
0
星屑
50
在线时间
10 小时
注册时间
2005-11-23
帖子
4085

第1届短篇游戏比赛亚军

6
发表于 2007-5-24 05:00:05 | 只看该作者
求素数表啊.

很有挑战性啊.

明天试试优化效率,

在不建立表的情况LS几位搜索60万的速度是多少??
纵然千里外,我等雁归来。
回复 支持 反对

使用道具 举报

Lv2.观梦者

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

贵宾

7
发表于 2007-5-24 14:59:30 | 只看该作者
  1. $zs = [2]
  2. def getzs(n)
  3.   t = Time.now
  4.   top = 1
  5.   i = 3
  6.   while i <= n
  7.     q = Math.sqrt(i).to_i
  8.     j = 0
  9.     flag = true
  10.     while $zs[j] <= q and j < top
  11.       if i % $zs[j] == 0
  12.         flag = false
  13.         break
  14.       end
  15.       j += 1
  16.     end
  17.     if flag
  18.       $zs.push(i)
  19.       top += 1
  20.     end
  21.     i += 2
  22.   end
  23.   p Time.now - t
  24.   return $zs
  25. end

  26. p getzs(50000)

  27. exit
复制代码

印象里上学时好象最高效率是这么做的。。。。{/pz}
象这样算50000也大概就0.6秒左右{/hx}
我只个搬答案的
叔叔我已经当爹了~
婚后闪人了……
回复 支持 反对

使用道具 举报

Lv1.梦旅人

月下可怜人

梦石
0
星屑
50
在线时间
10 小时
注册时间
2005-11-23
帖子
4085

第1届短篇游戏比赛亚军

8
发表于 2007-5-26 03: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
纵然千里外,我等雁归来。
回复 支持 反对

使用道具 举报

头像被屏蔽

Lv1.梦旅人 (禁止发言)

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

使用道具 举报

Lv1.梦旅人

月下可怜人

梦石
0
星屑
50
在线时间
10 小时
注册时间
2005-11-23
帖子
4085

第1届短篇游戏比赛亚军

10
发表于 2007-5-26 05:05:48 | 只看该作者
以下引用xgm于2007-5-25 21:00:23的发言:

我的算法太落后了,一个一个试....
前辈的方法都没看懂,正在研究中....
还有:  <<  是什么,帮助里没有,默认脚本里只有一处用到,不懂....

还有,请问初二数学知识能懂那两种算法吗


我那个是小学数学取质数表的方法......只是稍微加以改良,

<< 移位运算符,而数组字符串等对象也有这个,不过是方法,与数字的不一样,是用来加入对象的.

纵然千里外,我等雁归来。
回复 支持 反对

使用道具 举报

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

本版积分规则

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

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

GMT+8, 2025-2-17 16:10

Powered by Discuz! X3.1

© 2001-2013 Comsenz Inc.

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