给定数字的所有因数

编程入门 行业动态 更新时间:2024-10-25 00:27:13
本文介绍了给定数字的所有因数的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧! 问题描述

例如,我有 4800,我想查看这个数字的所有因数.

# num = 你想要的因数def factor_of(num)(1..num).collect { |n|[n, num/n] if ((num/n) * n) == num}pact结尾

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]]

你会如何用 ruby​​ 或任何语言来做到这一点?

解决方案

在 Ruby 中,prime 库为您提供分解:

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

要获得您的列表,您需要对可能的幂进行笛卡尔积:

需要'prime'def factor_of(number)素数,幂 = number.prime_division.transpose指数 = powers.map{|i|(0..i).to_a}除数 = exponents.shift.product(*exponents).map do |powers|primes.zip(powers).map{|prime, power|prime ** power}.inject(:*)结尾divisors.sort.map{|div|[div,数字/div]}结尾p factor_of(4800) # =>[[1, 4800], [2, 2400], ..., [4800, 1]]

注意:在 Ruby 1.8.7 中,您必须 require 'mathn' 而不是 require 'prime'.在 Ruby 1.8.6 中,require 'backports/1.8.7/enumerable/inject' 或修改上面的 inject...

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}pact 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?

解决方案

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...

更多推荐

给定数字的所有因数

本文发布于:2023-11-30 21:28:27,感谢您对本站的认可!
本文链接:https://www.elefans.com/category/jswz/34/1651524.html
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。
本文标签:因数   数字

发布评论

评论列表 (有 0 条评论)
草根站长

>www.elefans.com

编程频道|电子爱好者 - 技术资讯及电子产品介绍!