Ruby Prime分解错误

时间:2017-04-26 14:47:53

标签: ruby

我在ruby中制作了一个主要的因子计划。它解决了8-9位数字,但是当我向程序添加一个10位数字时,它就无法解决。对于调试,我在循环中编写了所有步骤,程序解决了,但没有完成。它将永远运行。这是代码:

require 'prime'
primSzamok = [1767172329]

def prim_dem(n)
  base = n / 2
  pf = Array.new
  i = 2
    while i <= base
      if Prime.prime?(i)
        while n % i == 0
          pf << i
          n /= i
          puts "i: #{i}, base: #{base}, n: #{n}"
        end
      end
      i += 1
    end
  return pf
end

haromCount = 0

primSzamok.each do |number|
  primArr = prim_dem(number)
  primString = "["

  iCount = 0
  primArr.each do |v|
    if iCount == 0
      primString += "#{v}"
    else
      primString += ", #{v}"
    end

    if v == 3
      haromCount += 1
    end

    iCount += 1
  end
  primString += "]"

  puts "Number: #{number} | Primes: #{primString}"
end

1 个答案:

答案 0 :(得分:0)

您无需检查(n/2)个号码,请查看sqrt(n),因为sqrt(n) * sqrt(n) = n表示在最坏的情况下,大素数会分解为两个中等大小的素数{{1} }本身是素数,迭代到n数字将花费太多时间。

将基数更改为n/2

base = sqrt(n)