ste*_*nvh 6 wolfram-mathematica
在Mathematica
a = FactorInteger[44420069694]
Run Code Online (Sandbox Code Playgroud)
受让人
{{2, 1}, {3, 1}, {7, 1}, {11, 2}, {13, 1}, {23, 2}, {31, 1}, {41, 1}}
Run Code Online (Sandbox Code Playgroud)
到了.现在,我希望每个列表都扩展,而不是指数的因素.然后上述分解将成为
{2, 3, 7, 11, 11, 13, 23, 23, 31, 41}
Run Code Online (Sandbox Code Playgroud)
我写了以下函数:
b = {}; Do[Do[b = Append[b, a[[i]][[1]]], {a[[i]][[2]]}], {i, Length[a]}]
Run Code Online (Sandbox Code Playgroud)
但如果你问我看起来很难看.肯定有一个更简洁的方法来实现这一目标吗?
Mathematica 6或更高版本中的另一种方式.
IN:= Flatten[ConstantArray @@@ a]
OUT ={2, 3, 7, 11, 11, 13, 23, 23, 31, 41}
甚至更短:
Join @@ ConstantArray @@@ a
使用这些功能(按发布顺序):
zvrba = Flatten[Map[Table[#[[1]], {#[[2]]}] &, #]] &;
dreeves = Sequence @@ Table[#1, {#2}] & @@@ # &;
gdelfino = Flatten[# /. {p_, n_} :> Table[p, {n}]] &;
mrwizard = Join @@ ConstantArray @@@ # &;
sasha = Function[{p, e}, Array[p &, e, 1, Sequence]] @@@ # &;
Run Code Online (Sandbox Code Playgroud)
并分别为它们分配字母Z,D,G,M,S,这里是它们效率的时序图.
首先,为了增加输入中的列表数量:

其次,为了增加每个列表中的指数(重复长度):

请注意,这些图表是对数的.越低越好.
这是另一种方法:
rptseq[x_, n_] := Sequence @@ Table[x, {n}]
rptseq @@@ a
Run Code Online (Sandbox Code Playgroud)
哪个可以用lambda函数压缩到:
Sequence @@ Table[#1, {#2}] & @@@ a
Run Code Online (Sandbox Code Playgroud)
如果你涉及到这种事情,zvrba的答案也可以缩小一点:
Flatten[Table[#1, {#2}]& @@@ a]
Run Code Online (Sandbox Code Playgroud)
(现在我看一下,我想我的版本是zvrba的一个非常小的变种.)