1001_s = 19684_10 求解 S in 并说明基数

1001_s = 19684_10 solving for S in and stating the base

这是一道作业题,我不想要答案,我只想参考如何解决类似的问题。我相信它解释了我的课本,"Computer Organization & Architecture: Themes and Variations",但我目前买不起课本。

问题如下:

For each of the following numbers, state the base in use; that is, what are the values of r, s, and t?

  1. 25_r = 23_10

  2. 1001_s = 19684_10

  3. 1011_t = 4931_10

我知道这类似于求解方程式。我猜我必须找到 rst,它们将是与十进制数字相匹配的特定基数。 我试着在网上搜索类似的问题,但我不确定要搜索什么,所以我不知道从哪里开始求解这些方程式。

从以 10 为基数的四分之一(或任何地方)开始,二分查找应该适用于半高效。

转换为基数 10 相当简单,所以每次进行常规二分查找时只需猜测并检查,如果数字太大则基数太大。如果数字太小,则基数太小。

从基数b转换为基数10的过程是将位置k的每个数字相乘(从右到左,开始在 0) 通过 b^k.

我不会给出所有答案,但是对于基数 s 中的 25,它是 2 * s^1 + 5 * s^0 = 23 减少到 2 * s + 1 = 232 * s = 18。那么s = 9.

由于这是一个编程网站,我将使用一个伪代码程序来检查您的答案:

procedure base_b_to_ten(int[] n, int base) {
    int sum = 0;

    for(int k=0; k<n.length; k++) {
        sum = sum + pow(n[n.length - k], base);
    }

    return base;
}

我只是认为这对 math.stackexchange.com 有好处,因为可以对乳胶答案进行编码。
无论如何,我认为这是一个有趣的问题。
基数 b 中的数字 n,具有数字 a_0,...,a_k,其中 a_0 是最右边的数字,是
n=从 i=0 到 k 的总和:a_i*b^i
这里,a_i 表示下标索引为 i.
所以,为了解决这个问题,我为 a_i 插入了你的第一个例子:

1*b^3 + 1*b^0 = 19684  
=>b^3 + b = 19684  
=>b*(b^2 + 1) = 19684  

现在这是三次多项式。
我个人无法通过分析来解决,尽管我知道有 cardano 公式可以解决这个问题。对于更长的数字,您将拥有更高阶的多项式,这可以由人类猜测或使用计算机来解决。
祝你好运!