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