Napísal som to, aby som našiel prvú faktorizáciu čísla num
, Poskytuje správne odpovede (napríklad 2, 3, 2, 3, 2 pre num
72), ale vychádza to nepárne. Nedokážem zistiť, prečo. Zaujímalo by ma, či niekto vidí niečo, čo nevidím.
$primes = [2]
$factors = []
num = 72
max = num
def isprime(n)
$primes.each do |x|
if n % x == 0 then
return
end
end
$primes.push(n)
return
end
i = 3
while i <= max
isprime(i)
i += 1
end
while !($primes.include?(num))
$primes.each do |x|
if num % x == 0 then
$factors.push(x)
num /= x
end
end
end
$factors.push(num)
puts $factors
odpovede:
1 pre odpoveď č. 1Musíte zlomiť $primes.each
akonáhle nájdete nejaký faktor, alebo ho zakaždým dokončíte.
while !($primes.include?(num))
$primes.each do |x|
if num % x == 0 then
$factors.push(x)
num /= x
break
end
end
end
$factors.push(num)
P.S: Len som sa držal algoritmickej strany a ignoroval som rubínovú stranu.
1 pre odpoveď č. 2
Vaša vnútorná slučka funguje takto. Zvážte, že skúšate číslo 72
.
Vaše pole prvočísel bude [2,3,5,7...]
V $primes.each do |x| loop
v prvej iterácii to otestuje num = 72
proti 2
a pridajte ho do priečinka factor
rad
Inner Iteration 1 => factors = [2], x = 2 , num = 36
Inner Iteration 2 => factors = [2,3], x = 3 , num = 12
Inner Iteration 3 => factors = [2,3], x = 5 , num = 12
Inner Iteration 3 => factors = [2,3], x = 7 , num = 12
Inner Iteration 3 => factors = [2,3], x = 11, num = 12
Teraz existuje vnútorná iterácia a hlavná slučka začína znova od 2
.
Inner Iteration 1 => factors = [2,3,2], x = 2 , num = 6
Inner Iteration 2 => factors = [2,3,2,3], x = 3 , num = 2
Vnútorná slučka sa začne znova
Inner Iteration 1 => factors = [2,3,2,3,2], x = 2 , num = 2
Musíte urobiť prestávku vo vnútornej slučke, aby ste urobili prvú faktorizáciu a výstup.
while !($primes.include?(num))
$primes.each do |x|
if num % x == 0 then
$factors.push(x)
num /= x
break
end
end