本文介绍了给定数目的所有因素的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

例如,我有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...

这篇关于给定数目的所有因素的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持!

08-13 16:14