如何开发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
相关产品推荐
相关产品推荐

