求助
mathematica吧
全部回复
仅看楼主
level 5
codrw 楼主
在R进制下,如何求得一个整数集合的子集,并将子集表示为原来进制中的数
举个例子吧
将整数45113表示为7进制,IntegerDigits[45113, 7]={2, 4, 5, 3, 4, 5}
则它的非空真子集为{5},{4,0},{4,5},{3,0,0},{3,0,5},{3,4,0},{3,4,5},{5,0,0,0}等一共有2^5-2=30个。
然后将这些集合表示为原进制中的数。FromDigits[{4, 0}, 7]=28,FromDigits[{4, 5}, 7]=33,
FromDigits[{3, 0, 0}, 7]=147
所要的结果就是求出这些所有数
程序怎么写,实在不会。请各位帮帮我
2020年01月28日 03点01分 1
吧务
level 12
你这可不叫“非空真子集”
subDigits[list_] :=
ReplacePart[list, (List /@ #) -> 0] & /@ Subsets[Range[Length@list]]
f[n_, k_] :=
FromDigits[#, k] & /@ subDigits[IntegerDigits[n, k]][[2 ;; -2]];
f[45113, 7]
2020年01月28日 04点01分 2
吧务
level 12
(*相对稍好些的写法*)
subDigits[list_] := Tuples[Thread[{list, 0*list}]]
f[n_, k_] :=
FromDigits[#, k] & /@ subDigits[IntegerDigits[n, k]][[2 ;; -2]];
f[45113, 7]
2020年01月28日 05点01分 3
level 7
另一种类似的方法:
g[n_,b_]:=Block[{d=IntegerDigits[n,b],l},
l=Length@d;
FromDigits[
#,b]&/@(d*IntegerDigits[#
,2,l]&/@Range[2^l-2])]
g[45113,7]
2020年01月28日 05点01分 4
谢谢,完全正确。
2020年01月28日 08点01分
1