我有这个代码,基本上我首先将例如数字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
答案 0 :(得分:2)
你想学习,所以我不会为你做所有的工作。
请写下这三种方法:
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
一旦你做完就回来了。我们将处理递归。
我稍微修改了一下你的答案。为了更清楚,我尝试为变量和方法使用不同的名称。此外,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]]]
。