ruby怎么能让这个因子化递归,直到我以二进制数结束?

时间:2017-01-08 09:46:33

标签: ruby recursion factors

我有这个代码,基本上我首先将例如数字28分解为: [2,2,7-] 然后我制作一个素数列表并找到该列表中每个因子的索引,因此2是索引0的素数和索引2的7素数,所以它最终如下: [[0],[0],[2]] 另一个递归将是: [[0],[0],[[0]]] 转换为二进制文件将是: 1101101110111

但我坚持这个:

require 'prime'

def f(n)

    Prime.prime_division(n).flat_map { |factor, power| [factor] *   power }

end

n=rand(10000)

puts n

f=f (n)

require 'prime'

@list=Prime.take(10000)

g=[]

j=0

f.each do |j|


if j>10

    i=f(@list.index(j))

    g.push i

    i=[]

else

    g.push j

end

end

print g

1 个答案:

答案 0 :(得分:2)

你想学习,所以我不会为你做所有的工作。

第1步

请写下这三种方法:

def get_factors(integer)
  # return an Array of Integers:
  # get_factors(28) -> [2,2,7]
end

def get_factor_index(prime)
  # return the index of prime in Prime.all :
  # 2 -> 0
  # 7 -> 2
end

def array_to_binary(nested_array)
  # convert nested_array (with 0s in leaves) to binary
  # [[0],[0],[[0]]] -> "1101101110111"
  # Hint : Use Array#to_s, and then String#gsub 3 times to convert ',' to '', and '[' or ']' to 1
end

一旦你做完就回来了。我们将处理递归。

第2步

我稍微修改了一下你的答案。为了更清楚,我尝试为变量和方法使用不同的名称。此外,Ruby自动返回方法的最后一行。您不需要定义额外的变量。方法可能会更有效地编写,但我不希望您不识别您的代码。

你的get_factor_index比我对BTW的要求更多。我不确定我们可以像这样使用它:

require "prime"

def get_factors(integer)
  Prime.prime_division(integer)
end

def nested_array(factors)
  factors.flat_map { |factor, power| [factor] *   power }
end

def get_factor_index(nested_array)
  list=Prime.take(10000)
  temp=[]
  nested_array.each do |i|
    p = list.index(i)
    temp.push(p)
  end
  temp
end

def array_to_binary(array)
  temp=array.to_s
  temp=temp.gsub("[","1")
  temp=temp.gsub("]","1")
  temp=temp.gsub(",","")
  temp.gsub(" ","")
end

现在,请编写一个使用以上所有方法的方法,将512转换为" 10000000001"。我不确定这是否是正确答案,但我们稍后会对此进行处理。

另外,在20(不是28!)上试试这个方法,看看你得到了什么。使用上述方法,您可以尝试手动定制获取[[0],[0],[2]]的方法。如果它最初仅适用于20,那就没问题了。

如果您喜欢冒险,请尝试使用上述方法获取[[0],[0],[[0]]]