以下引用xgm于2007-5-22 21:13:02的发言:
PS:上限最好不要太大,RM默认10秒就挂,我的机器9秒才能算35000上限的……
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
以下引用xgm于2007-5-25 21:00:23的发言:
我的算法太落后了,一个一个试....
前辈的方法都没看懂,正在研究中....
还有: << 是什么,帮助里没有,默认脚本里只有一处用到,不懂....
还有,请问初二数学知识能懂那两种算法吗
以下引用美兽于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
欢迎光临 Project1 (https://rpg.blue/) | Powered by Discuz! X3.1 |