【问题标题】:Array in an odd order以奇数顺序排列
【发布时间】:2015-03-08 11:47:19
【问题描述】:

我写这篇文章是为了找到数字num 的素因数分解。它给出了正确的答案(例如,num 72 的 2、3、2、3、2),但它以奇怪的顺序出现。我不知道为什么。我想知道是否有人看到了我没有看到的东西。

$primes = [2]
$factors = []
num = 72
max = num

def isprime(n)
 $primes.each do |x|
  if n % x == 0 then
   return
  end
 end
 $primes.push(n)
 return
end

i = 3
while i <= max
 isprime(i)
 i += 1
end

while !($primes.include?(num))
 $primes.each do |x|
  if num % x == 0 then
   $factors.push(x)
   num /= x
  end
 end
end
$factors.push(num)

puts $factors

【问题讨论】:

  • 为什么要订购这些数字?

标签: ruby algorithm primes prime-factoring factorization


【解决方案1】:

您需要在找到因子后立即中断$primes.each 循环,否则每次都会完成循环。

while !($primes.include?(num))
  $primes.each do |x|
    if num % x == 0 then
      $factors.push(x)
      num /= x
      break
    end
  end
end
$factors.push(num)

P.S:我只关注算法方面,忽略了 Ruby 方面。

【讨论】:

  • 好吧哇,我真的以为我已经坏了。哈。好地方,谢谢。 ps 我在手机上编码。这是我的借口,我会坚持下去的,哈哈
【解决方案2】:

你的内循环是这样工作的。假设您正在测试号码 72
您的素数数组将是 [2,3,5,7...]

在第一次迭代的$primes.each do |x| loop 中,它将针对2 测试num = 72 并将其添加到factor 数组中

Inner Iteration 1 => factors = [2], x = 2 , num = 36
Inner Iteration 2 => factors = [2,3], x = 3 , num = 12
Inner Iteration 3 => factors = [2,3], x = 5 , num = 12
Inner Iteration 3 => factors = [2,3], x = 7 , num = 12
Inner Iteration 3 => factors = [2,3], x = 11, num = 12

现在内部迭代存在,主循环再次从2开始。

Inner Iteration 1 => factors = [2,3,2], x = 2 , num = 6
Inner Iteration 2 => factors = [2,3,2,3], x = 3 , num = 2

内循环再次开始

Inner Iteration 1 => factors = [2,3,2,3,2], x = 2 , num = 2

您必须在内部循环中放置一个 break 才能进行第一次分解并退出。

while !($primes.include?(num))
 $primes.each do |x|
  if num % x == 0 then
   $factors.push(x)
   num /= x
   break
  end
end

【讨论】:

    猜你喜欢
    • 2016-04-25
    • 2021-11-05
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-05-09
    • 2015-09-29
    • 2012-05-21
    • 1970-01-01
    相关资源
    最近更新 更多