首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Ruby素数分解错误

Ruby素数分解错误
EN

Stack Overflow用户
提问于 2017-04-26 22:47:53
回答 1查看 68关注 0票数 0

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

代码语言:javascript
复制
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
EN

回答 1

Stack Overflow用户

发布于 2017-04-27 08:10:16

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

将基址更改为base = sqrt(n)

代码语言:javascript
复制
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
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/43637527

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档