Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

All factors of a given number

For example, I have 4800 and I would like to see all the factors of this number.

 # num = the number you want factors of   def factors_of(num)     (1..num).collect { |n| [n, num/n] if ((num/n) * n) == num}.compact  end 

divisors_of(4800) => [[1, 4800], [2, 2400], [3, 1600], [4, 1200], [5, 960], [6, 800], [8, 600], [10, 480], [12, 400], [15, 320], [16, 300], [20, 240], [24, 200], [25, 192], [30, 160], [32, 150], [40, 120], [48, 100], [50, 96], [60, 80], [64, 75], [75, 64], [80, 60], [96, 50], [100, 48], [120, 40], [150, 32], [160, 30], [192, 25], [200, 24], [240, 20], [300, 16], [320, 15], [400, 12], [480, 10], [600, 8], [800, 6], [960, 5], [1200, 4], [1600, 3], [2400, 2], [4800, 1]]

How would you do this in ruby or any language?

like image 904
thenengah Avatar asked Aug 03 '10 15:08

thenengah


People also ask

How do you find factors of a given number?

Establish the number you want to find the factors of, for example 24. Find two more numbers that multiply to make 24. In this case, 1 x 24 = 2 x 12 = 3 x 8 = 4 x 6 = 24. This means the factors of 24 are 1, 2, 3, 4, 6, 8, 12 and 24.

What are all the factors of every number?

The factors of a number include the number, itself, and 1. But these are pretty trivial factors, and so when we talk about factoring a number, we don't generally include factorizations that include 1 or the number itself.


2 Answers

In Ruby, the prime library gives you the factorization:

require 'prime' 4800.prime_division #=> [[2, 6], [3, 1], [5, 2]] 

To get that list of yours, you take the cartesian product of the possible powers:

require 'prime' def factors_of(number)   primes, powers = number.prime_division.transpose   exponents = powers.map{|i| (0..i).to_a}   divisors = exponents.shift.product(*exponents).map do |powers|     primes.zip(powers).map{|prime, power| prime ** power}.inject(:*)   end   divisors.sort.map{|div| [div, number / div]} end  p factors_of(4800) # => [[1, 4800], [2, 2400], ..., [4800, 1]] 

Note: In Ruby 1.8.7, you must require 'mathn' instead of require 'prime'. In Ruby 1.8.6, require 'backports/1.8.7/enumerable/inject' or modify the inject above...

like image 160
Marc-André Lafortune Avatar answered Oct 08 '22 19:10

Marc-André Lafortune


 def divisors_of(num)    (1..num).select { |n|num % n == 0}  end 
like image 45
bluexuemei Avatar answered Oct 08 '22 18:10

bluexuemei