Ruby素数分解错误

Ruby素数分解错误,ruby,Ruby,我用ruby做了一个prime FactorZaton程序。它可以解8-9位数字,但当我在程序中添加10位数字时,它无法解。对于debug,我编写了循环中的所有步骤,程序解决了问题,但没有完成。它将永远运行。代码如下: require 'prime' primSzamok = [1767172329] def prim_dem(n) base = n / 2 pf = Array.new i = 2 while i <= base if Prime.pri

我用ruby做了一个prime FactorZaton程序。它可以解8-9位数字,但当我在程序中添加10位数字时,它无法解。对于debug,我编写了循环中的所有步骤,程序解决了问题,但没有完成。它将永远运行。代码如下:

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
需要“prime”
primSzamok=[1767172329]
def prim_dem(n)
基数=n/2
pf=数组.new
i=2

当我你不需要检查多达
(n/2)
个数时,检查多达
sqrt(n)
,因为
sqrt(n)*sqrt(n)=n
意味着在最坏的情况下,大素数将分解为两个中等大小的素数,否则
n
本身就是素数,迭代多达
n/2
个数将花费太多时间

将base更改为
base=sqrt(n)

需要“prime”
primSzamok=[1767172329]
def prim_dem(n)
基准=sqrt(n)
pf=数组.new
i=2

虽然我注意到:由于您已经需要素数,您只需提供以下信息:
p 1767172329。素数除法
,结果是[[3,3]、[13,3]、[31,3]]。如上所述,如果您费心包括“素数”,则您正在重新创建轮子。我似乎也喜欢8位和9位数字。假设这是一个练习,请尝试重新开始并删除要求,然后看看是否可以为此解决方案找到一个好方法:)
require 'prime'
primSzamok = [1767172329]

def prim_dem(n)
  base = sqrt(n)
  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