Wolfram mathematica 在mathematica中将数字转换为变量基

Wolfram mathematica 在mathematica中将数字转换为变量基,wolfram-mathematica,integer-division,Wolfram Mathematica,Integer Division,设n是一个整数,A={2,3,…,10},我想做如下操作: 将n除以2,得到一个提示r2和一个商q2 将q2除以3,因此有一个提示r3和一个商q3 我们重复这个过程,直到商小于下一个数字 将最后一个商与之前的提醒一起写 例如,n=45 45/2 ....... r_2=1, q_2=22 22/3 ....... r_3=1, q_3=7 7/4 ....... r_4=3, q_4=1 因为q4=1小于下一个数字,即5,所以我们中断 结果为q4r4r3r2,其中等于131

设n是一个整数,A={2,3,…,10},我想做如下操作:

  • 将n除以2,得到一个提示r2和一个商q2
  • 将q2除以3,因此有一个提示r3和一个商q3
  • 我们重复这个过程,直到商小于下一个数字
  • 将最后一个商与之前的提醒一起写
  • 例如,n=45

    45/2 .......    r_2=1, q_2=22
    22/3 .......    r_3=1, q_3=7
     7/4 .......    r_4=3, q_4=1
    
    因为q4=1小于下一个数字,即5,所以我们中断

    结果为q4r4r3r2,其中等于1311

    谢谢你的帮助

    我这样做了,但不起作用

    n = 45;
    i = 2;
    list = {Mod[n, i]};
    
    While[Quotient[n, i] >= i + 1, n == Quotient[n, i]; i++; 
       AppendTo[list, Mod[n, i]];
       If[Quotient[n, i] < i + 1, Break[]]; AppendTo[list, Quotient[n, i]]];
    
    list
    Row[Reverse[list]]
    

    这不是我想要的结果。

    您可以使用以下内容:

    f[n_Integer] := 
     NestWhileList[
       {QuotientRemainder[#[[1, 1]], #[[2]] + 1], #[[2]] + 1} &,
       {{n}, 1},
       #[[1, 1]] != 0 &
     ] // Rest
    
    f[45]
    
    您可以使用
    Part
    获得所需的任何输出位

    如果可以处理语法,这里有一种更高级的方法:

    f2[n_Integer]    := Reap[f2[{n, 0}, 2]][[2, 1, 2 ;;]] // Reverse
    
    f2[{q_, r_}, i_] := f2[Sow @ r; QuotientRemainder[q, i], i + 1]
    
    f2[{0, r_}, i_]  := Sow @ r
    
    f2[45]
    
    代码如下:

    A = Table[i, {i, 2, 10}]; (* array of numbers *)
    n = 45; (* initial value *)
    ans = {}; (* future answer which is now empty list *)
    For[i = 1, i <= Length[A], i++, (* looping over A *)
     If[n < A[[i]], (* exit condition *)
      ans = Append[ans, n]; (* appending last n when exit *)
      Break[]
      ];
     qr = QuotientRemainder[n, A[[i]]]; (* calculating both quotient and reminder *)
     ans = Append[ans, qr[[2]]]; (* adding second member to the answer *)
     Print[qr]; (* printing *)
     n = qr[[1]]; (* using first member as new n to process *)
     ];
    ans (* printing result in Mathematica manner *)
    

    请解释你问题的背景。你写这篇文章的方式听起来太像家庭作业了。顺便说一句,家庭作业问题是可以的,但它们应该得到“特殊”的处理(通常是尝试教授钓鱼技巧,而不是为你钓鱼)。此外,请尝试包含你能够生成的任何代码来解决问题prolem@belisarius,我添加了代码。对于混合基数算法,这个问题提供了一些有用的指导。谢谢,第二种方法有效,但1)数量有限,2)对我来说很复杂。3) 我想删除逗号和方括号,只是我需要一个像1311这样的整数。如果您能帮助我编写更长但更简单的代码。@asd(1)有限的数字是什么意思?我刚刚在
    10^1000
    上试过,效果很好。(2) 这就是为什么我还提供了第一种方法。你明白吗?如果没有,我以后再解释,但我现在没有时间。(3) 从数字看
    f2[n_Integer]    := Reap[f2[{n, 0}, 2]][[2, 1, 2 ;;]] // Reverse
    
    f2[{q_, r_}, i_] := f2[Sow @ r; QuotientRemainder[q, i], i + 1]
    
    f2[{0, r_}, i_]  := Sow @ r
    
    f2[45]
    
    {1, 3, 1, 1}
    
    A = Table[i, {i, 2, 10}]; (* array of numbers *)
    n = 45; (* initial value *)
    ans = {}; (* future answer which is now empty list *)
    For[i = 1, i <= Length[A], i++, (* looping over A *)
     If[n < A[[i]], (* exit condition *)
      ans = Append[ans, n]; (* appending last n when exit *)
      Break[]
      ];
     qr = QuotientRemainder[n, A[[i]]]; (* calculating both quotient and reminder *)
     ans = Append[ans, qr[[2]]]; (* adding second member to the answer *)
     Print[qr]; (* printing *)
     n = qr[[1]]; (* using first member as new n to process *)
     ];
    ans (* printing result in Mathematica manner *)
    
    {1, 1, 3, 1}