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

Ruby求解N1到N2闭区间内可被N3整除数的统计输出问题

Ruby实现闭区间内查找指定除数整除数的方案

核心逻辑

  • 先做基础合法性校验:除数N3不能为0,否则会触发除零报错;如果输入的区间左端点N1大于右端点N2,自动交换两个值保证区间有效,避免漏算
  • 可被N3整除的判定规则:整数对N3取模结果为0,Ruby中用%运算符完成取模计算
  • 筛选完成后逐行打印符合条件的数值,最后统计总数输出

基础实现代码

这个版本写法直观,适合区间范围不大的场景:

def get_divisible_numbers(n1, n2, n3)
  # 校验除数合法性
  raise ArgumentError, "N3不能为0" if n3.zero?
  # 修正区间顺序
  range_start, range_end = [n1, n2].minmax
  # 筛选符合条件的数
  matched_nums = (range_start..range_end).select { |num| num % n3 == 0 }

  # 按要求输出
  puts "符合条件的数值:"
  matched_nums.each { |num| puts num }
  puts "符合条件的数值总个数:#{matched_nums.length}"

  matched_nums
end

# 调用示例:查找1-20区间内可被3整除的数
get_divisible_numbers(1, 20, 3)

示例运行输出

符合条件的数值:
3
6
9
12
15
18
符合条件的数值总个数:6

大区间优化版本

如果N1和N2差值达到百万、千万量级,逐个遍历区间判断效率很低,可以直接通过数学计算定位第一个符合条件的数,再按N3为步长生成所有结果,不需要遍历整个区间:

def get_divisible_numbers_fast(n1, n2, n3)
  raise ArgumentError, "N3不能为0" if n3.zero?
  range_start, range_end = [n1, n2].minmax
  # 计算区间内第一个可被n3整除的数
  first_match = range_start + (n3 - range_start % n3) % n3

  if first_match > range_end
    puts "无符合条件的数值"
    puts "符合条件的数值总个数:0"
    return []
  end

  # 按步长直接生成所有符合条件的数
  matched_nums = (first_match..range_end).step(n3).to_a

  puts "符合条件的数值:"
  matched_nums.each { |num| puts num }
  puts "符合条件的数值总个数:#{matched_nums.length}"

  matched_nums
end

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.26 22:15:49