wsc810 发表于 2021-9-18 07:41:56

十进制数化为对称三进制

对称三进制的系数为 `1, 0,-1`。为了不与运算符号相混淆,一般将系数`-1`写为`\bar1`.
例如十进数`11=9+3-1`,化为对称三进数即`11\bar1`.
试用Mathematica编写一个转换程序。

这里有一篇论文

wsc810 发表于 2021-9-19 17:35:59

很简单,对称5进制 ,对称7进制,...都可以搞出来。只是编程有点难

mathe 发表于 2021-9-21 11:11:56

和1+3+9+27+81部分和做比较。比如11在9和27之间,又小于1+3+9,所以先表示为9+2. 而2 在1,3之间,大于部分和1,需要表示为3-1

hujunhua 发表于 2021-9-24 16:58:53

用Mathematica来编程,就是一只小鸡。那个论文真是好一把牛刀;P 他不知道绝对值最小剩余么?
先定义一个转化函数:
BaseformSymmetric3:=Module[{n=n0},NestWhileList[{Quotient,Mod} &,{n,0},First@#!=0&][]//Rest//Reverse]
然后运算一个实例,再化回去验算一下:
BaseformSymmetric3
FromDigits[%, 3]

wsc810 发表于 2021-9-24 19:47:16

任意对称 奇数进制

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 能写一个这样的函数吗?

wsc810 发表于 2021-9-26 12:04:38

短除法过程

wsc810 发表于 2021-10-10 12:13:27

写下这个函数的完整形式

BaseformSymmetric :=
Module[{n = n0},
NestWhileList[{Quotient,
      Mod} &, {n, 0}, First@# != 0 &][] // Rest // Reverse]
页: [1]
查看完整版本: 十进制数化为对称三进制