어떤 수를 소수의 곱으로만 나타내는 것을 소인수분해라 하고, 이 소수들을 그 수의 소인수라고 합니다. 예를 들면 13195의 소인수는 5, 7, 13, 29 입니다.

600851475143의 소인수 중에서 가장 큰 수를 구하세요.


In [4]:
target = 13195
result = 0
k = 0
2.upto(target).to_a.each do |i|
  k += 1
  break if k > 100
  reminder = target % i
  
  if reminder != 0
    next
  else
    target = target / i
    puts target.to_s + "/" + i.to_s
    if target == 1
      result = i
      break
    end
    redo
  end
end

result


2639/5
377/7
29/13
1/29
Out[4]:
29

In [6]:
target = 600851475143 
result = 0
k = 0
(2..target).lazy.each do |i|
  reminder = target % i
  
  if reminder != 0
    next
  else
    target = target / i
    puts target.to_s + "/" + i.to_s
    if target == 1
      result = i
      break
    end
    redo
  end
end


8462696833/71
10086647/839
6857/1471
1/6857

In [ ]: