十进制数化为对称三进制
对称三进制的系数为 `1, 0,-1`。为了不与运算符号相混淆,一般将系数`-1`写为`\bar1`.例如十进数`11=9+3-1`,化为对称三进数即`11\bar1`.
试用Mathematica编写一个转换程序。
这里有一篇论文
很简单,对称5进制 ,对称7进制,...都可以搞出来。只是编程有点难 和1+3+9+27+81部分和做比较。比如11在9和27之间,又小于1+3+9,所以先表示为9+2. 而2 在1,3之间,大于部分和1,需要表示为3-1 用Mathematica来编程,就是一只小鸡。那个论文真是好一把牛刀;P 他不知道绝对值最小剩余么?
先定义一个转化函数:
BaseformSymmetric3:=Module[{n=n0},NestWhileList[{Quotient,Mod} &,{n,0},First@#!=0&][]//Rest//Reverse]
然后运算一个实例,再化回去验算一下:
BaseformSymmetric3
FromDigits[%, 3]
任意对称 奇数进制
i=0
K>0时,重复执行
如果 K mod R ≤(R-1)/2,则k_i=ki, K= $\lfloor K/R \rfloor$
K mod R >(R-1)/2,则 k_i= k_i-R ,K= `\lceil\frac KR \rceil`
i=i+1
返回 $ {k_{n-1},k_{n-2},...,k_1,k_0}$
以上计算过程可以写成短除法,化二进制的那种
BaseformSymmetric={1,-1,1,0,-2}
如果将你的代码中的3替换为R,结果并不完全正确,hujunhua 能写一个这样的函数吗? 短除法过程
写下这个函数的完整形式
BaseformSymmetric :=
Module[{n = n0},
NestWhileList[{Quotient,
Mod} &, {n, 0}, First@# != 0 &][] // Rest // Reverse]
页:
[1]