You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何开发Ruby程序按用户需求输出指定数量的质数斐波那契数列项

核心问题

需要开发Ruby程序,实现根据用户输入的项数范围,输出斐波那契数列中同时为质数的对应项。当前已编写的基础代码只实现了斐波那契数列生成逻辑,缺失质数判断环节,无法达到筛选输出的预期目标。
现有基础代码:

def fib(n)
if (n <= 2)
return 1
else
return (fib(n-1)+fib(n-2))
end
end
puts " please enter the number of terms : -"
n=gets.chomp.to_i
puts "The first #{n} terms of Fibonacci series that are also prime numbers are:-"
for c in 1..n
puts fib(c)
end
代码完善方向
  • 新增独立的质数判断方法:按照质数定义(大于1的自然数,仅能被1和自身整除)实现判断逻辑,为提升运行效率,判断时只需要遍历到目标数的平方根位置即可,无需遍历到目标数本身
  • 调整原有遍历输出逻辑:在循环获取每一项斐波那契数时,先传入质数判断方法校验,校验通过再执行输出
  • 可选优化:原有递归实现的fib方法在项数较大时会存在大量重复计算,可后续替换为迭代版本提升运行效率
完善后可直接运行的参考代码
# 质数判断方法
def prime?(num)
  return false if num < 2
  (2..Math.sqrt(num).to_i).each do |divisor|
    return false if (num % divisor).zero?
  end
  true
end

# 斐波那契数生成方法
def fib(n)
  return 1 if n <= 2
  fib(n-1) + fib(n-2)
end

puts "请输入需要遍历的斐波那契数列总项数:"
scan_range = gets.chomp.to_i
puts "在前#{scan_range}项斐波那契数列中,属于质数的项为:"

# 遍历指定范围的斐波那契数,筛选质数输出
(1..scan_range).each do |term|
  value = fib(term)
  puts value if prime?(value)
end

补充说明:斐波那契数列的前两项均为1,1不属于质数范围,因此筛选出的结果会从数值2(数列第3项)、3(数列第4项)开始,属于正常逻辑,并非代码错误。


内容的提问来源于stack exchange,提问作者tengku

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.24 15:36:11