本文介绍了给定数目的所有因素的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!
问题描述
例如,我有4800,我想看到这个数字的所有因素。
#NUM =数你想要的因素
高清factors_of(NUM)
(1..num).collect {| N | [N,NUM / N]如果((NUM / N)* n)的== NUM} .compact
结束
你怎么会做这样的红宝石或任何语言?
解决方案
在Ruby中,主要
库为您提供了分解:
要求'黄金'
4800.prime_division#=> [[2,6],[3,1],[5,2]
要得到你的列表中,你拿的可能的权力笛卡尔乘积:
要求'黄金'
高清factors_of(数)
素数,功率= number.prime_division.transpose
指数= powers.map {| I | (0..i).to_a}
除数= exponents.shift.product(*指数).MAP办|权力|
primes.zip(权力).MAP {|黄金,电源|素**功率} .inject(*)
结束
divisors.sort.map {|格| [DIV,数/ DIV]}
结束
p factors_of(4800)#=> [[1,4800],[2,2400],...,[4800,1]]
注意的:在Ruby 1.8.7,你必须要求mathn
而不是要求'黄金'
。在Ruby 1.8.6,要求反向移植/ 1.8.7 /枚举/注射
或修改注
上方。 ..
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
How would you do this in ruby or any language?
解决方案
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...
这篇关于给定数目的所有因素的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持!