【发布时间】:2016-09-02 13:59:43
【问题描述】:
我正在尝试为以下问题编写代码:
输入
输入以单行中的测试用例数量 t (t
输出
对于每个测试用例打印所有质数 p 使得 m
示例输入:
2
1 10
3 5
样本输出:
2
3
5
7
3
5
我的代码:
def prime?(number)
return false if number == 1
(2..number-1).each do |n|
return false if number % n == 0
end
true
end
t = gets.strip.to_i
for i in 1..t
mi, ni = gets.strip.split(' ')
mi = mi.to_i
ni = ni.to_i
i = mi
while i <= ni
puts i if prime?(i)
i += 1
end
puts "\n"
end
代码运行良好,我遇到的唯一问题是,与其他编程语言相比,在大输入范围内运行需要花费大量时间。
我在这里做错了吗?能否进一步优化此代码以加快运行时间?
我尝试过使用 for 循环、普通循环、创建数组然后打印它。 任何建议。
【问题讨论】:
-
"花费了很多时间" 给我们数字。有多慢?
-
您的代码中有一个潜在的错误,与
i用于内部循环的重用有关。为任一循环使用不同的变量可能会很好。我将在下面的代码示例中进行更改。 -
@mast 我没有时间......但它比 6 秒慢,因为这是 spoj.com 上的一个挑战,当我提交我的解决方案时,它说超过了时间限制。限时6秒