小编Roy*_*yce的帖子

无法从{2,3,4,5,6,7,8}获得的最小整数(Mathematica)

我正在尝试使用Mathematica解决以下问题:

{2,3,4,5,6,7,8}通过算术运算{+,-,*,/},取幂和括号从集合中无法获得的最小正整数是多少.集合中的每个数字必须只使用一次.不允许一元操作(例如,1不能转换为-1而不使用0).

例如,该号码1073741824000000000000000可通过以下方式获得(((3+2)*(5+4))/6)^(8+7).

我是Mathematica的初学者.我编写的代码我相信解决了集合的问题{2,3,4,5,6,7}(我获得了2249作为我的答案),但我的代码效率不高,无法使用集合{2,3,4,5,6,7,8}.(我的代码在设置上运行需要71秒{2,3,4,5,6,7})

我非常感谢使用Mathematica解决这个更难的问题的任何提示或解决方案,或者关于如何加速现有代码的一般见解.

我现有的代码使用蛮力,递归方法:

(*这定义了一组1号码的组合作为该1号码的集合*)

combinations[list_ /; Length[list] == 1] := list
Run Code Online (Sandbox Code Playgroud)

(*这测试是否可以对两个数字进行取幂,包括(有些)任意限制以防止溢出*)

oktoexponent[number1_, number2_] :=

 If[number1 == 0, number2 >= 0,
  If[number1 < 0,
   (-number1)^number2 < 10000 \[And] IntegerQ[number2],
   number1^number2 < 10000 \[And] IntegerQ[number2]]]
Run Code Online (Sandbox Code Playgroud)

(*这需要一个列表并删除分母大于100000*的分数)

cleanup[list_] := Select[list, Denominator[#] < 100000 &]
Run Code Online (Sandbox Code Playgroud)

(*这定义了一组2个数字的组合 - 并返回一组通过应用程序获得的所有可能的数字+ - */由oktoexponent和清理规则*过滤)

combinations[list_ /; Length[list] == 2 && Depth[list] == 2] :=
  cleanup[DeleteCases[#, Null] &@DeleteDuplicates@
    {list[[1]] + list[[2]],
     list[[1]] …
Run Code Online (Sandbox Code Playgroud)

wolfram-mathematica

8
推荐指数
1
解决办法
376
查看次数

标签 统计

wolfram-mathematica ×1