我在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
答案 0 :(得分:0)
您无需检查(n/2)
个号码,请查看sqrt(n)
,因为sqrt(n) * sqrt(n) = n
表示在最坏的情况下,大素数会分解为两个中等大小的素数{{1} }本身是素数,迭代到n
数字将花费太多时间。
将基数更改为n/2
base = sqrt(n)