Matlab社区

Matlab,社区和更多

双人愉快 - 富裕的数字乐趣

你今天在为客座博客对待。但首先…

数字1947年和7194之间的关系是什么?仔细观察,你会发现它们是相同的,除了数字7已从回到前面移动。

次要的文本变化在数字空间中具有很大的影响。Matlab Central Hero.约翰D 'Errico在下面的客人邮政中有一些关于这种关系的事情。但在我们到达那之前,我想提出一些评论。首先是感谢约翰向我发送这篇文章!他送了我一个直播脚本(Matlab文件类型与后缀MLX),我将它转换为在此处的WordPress博客文章。导致我的第二次评论:您想如何成为此网站的访客博客?如果您在一个有趣的主题上有一个现场脚本,并且您想发布它,请将其发送给我(gulele@mathworks.com)。我们可以一起工作,谁知道?你最终可能会在Matlab Central上划伤。

现在,你对待。看着约翰,因为他解决了Deft中风的邪恶问题。虽然我会问你,一旦你了解问题陈述,就尝试自己在进入结束之前自己解决它。我打赌你不会和约翰一起做。无论如何,我不能......

双倍你的乐趣

经过约翰D 'Errico

哪个正整数在其最后一位(即个位)被移动到第一或最高位时加倍?假设这些数字用十进制表示。事实上,这是一个众所周知的问题。例如,你可以找到它youtube讨论了

在二进制中提出时,问题也很有趣。是否存在二进制文件?也就是说,是否存在二进制数,也许10101011101,使得如果我们将该单元位转换到数量的左端,则该数量将完全加倍?

唉,我们可以证明这种解决方案永远不会存在,至少,不在二进制中。证明很简单。想象一下,由完全n二进制位组成的解决方案。我们所描述的偏移不会增加数字中的位数。它仅仅是现有位的纯换位。

但是,当你将任何二进制数乘以2乘以2时何时发生?只要数字是非零,那么如果要乘以2,则始终增加数量的位数。因此,我们的目标是不可能对任何二进制数不可能。如果数量写入基座3或更高版本,则可能发生这种情况。我们以后可以调查这种可能性,但首先是如何在基础10中工作?

回到基地10,我们已经假设存在一些十进制数,使得来自单位位置的最低订单十进制数字的循环移动将成为最高阶数,然后将数字加倍。同样,这不会改变数字中的十进制数字的数量。

我们可以尝试一些简单的例子,看看它是如何工作的。例如,考虑数字102。这里的变换会让我们创建一个新的数字210,通过将2从最低位移动到最高位来实现。然而,这并没有使数字翻倍。

2 * 102〜= 210
ANS =.逻辑1

我们可能会尝试其他数字,也许12345,但是这个数字的加倍不会产生51234。事实上,我会断言对这个问题的蛮力解决方案将需要一些努力。我们需要使用数学来解决我们的问题。

我们的目标是找到表格的十进制数量

在这个表达式中,y是一个单位数整数,x是一个任意顺序的整数。组合起来,它们必须满足以下关系:

在那个关系中,p是数字n的十进制数字的数量。然后仅仅是将个位左移P位。如果存在多个解,我们需要寻找最小的解。金宝搏官方网站

问的一个重要问题是如果单位数字可以是0?如果y为零,则会发生什么?然后管理方程减少到相当简单的情况下

解决方案x == 0。因此,如果问题的数量有一个零单位数字是非常无聊的n == 0,我们唯一可能的解决方案是非常无聊的n == 0.由于我们已经需要n必须是一个正整数,因此情况是不可能的。因此,Y必须来自于集合[1:9]。随着一些额外的努力,我们可能能够更加完整,但是1:9是一个很好的开始。现在返回到这个问题的管理方程,现在隔离x和y在平等的两侧。

如果该等式中的变量是整数,则算术的基本定理告诉我们19(作为素数)必须划分Y,或者它必须划分。但是,我们刚刚指出,Y必须来自Set 1:9。我们现在可以得出结论19必须分裂

因此,什么是p的最小功率,使得19划分10 ^ p-2?(注意:下面使用的SYM命令来自符号数学工具箱的)

p = find(mod(sym(10)。^(1:100) -  2,19)== 0)
P = 17 35 53 71 89
差异(p)
ans = 18 18 18 18

这很有用。最小可能的功率p这样作为一个整数除数是17.它似乎每18个权力在那点之后也有相同的财产,但我们将首先对P = 17的情况感兴趣,好像存在最小的解决方案,它可能有18位十进制数字。在蛮力之前,我确实建议是解决这个问题的艰难方法。

至少,如果确实存在解决方案,我们可以使用int64使用计算计算。双重精度将失败我们,因为双打围绕16个十进制数字进行速率,因此在Thy无法完全表示整数之前。然而,净空是在int64中,因为

Intmax('int64'的)
ANS =.INT64.9223372036854775807

这是一个带有19个十进制数字的数字。UINT64将允许我们稍高推,但INT64完全充足。

现在,假设我们有一个从Set 1:9的单位数字?

unitsdigit = int64(1:9)';p = int64(17);

现在我们有足够的信息来解决x。

x = (int64(10)^P - 2)*unitsdigit/int64(19);N = 10*x + unitsdigit
n =9×1 int64列向量52631578947368421 105263157894736842 157894736842105263 210526315789473684 263157894736842105 315789473684210526 368421052631578947 421052631578947368 473684210526315789

那些是X的潜在价值。我们可以看出他们是否工作过。也就是说,如果我们是双n,那么我们必须具有相同的结果,好像我们将单位转换为数字即可成为最高阶数。

[2 * n,10 ^ p * enersdigit + x]
ANS =.9×2 int64矩阵105263157894736842 105263157894736842 210526315789473684 210526315789473684 315789473684210526 315789473684210526 421052631578947368 421052631578947368 526315789473684210 526315789473684210 631578947368421052 631578947368421052 736842105263157894 736842105263157894 842105263157894736 842105263157894736 947368421052631578 947368421052631578

第一种情况下,使用Y == 1,失败了测试,因为我们看到一个额外的0插入第二个最高订单数字。然而,留下第二种情况,具有x == 2,作为最小的解决方案。这必须是具有所需属性的最小数字。

n(2)
ANS =.INT64.105263157894736842
2 *(10 * x(2)+ unitsdigit(2))== 10 ^ p * insidigit(2)+ x(2)
ANS =.逻辑1

还发现了8个其他解,除了它们不是最小解金宝搏官方网站外,它们都是有效的。超过这个点,下一个解将有36个小数,远远超过了甚至uint64的限制。

再次,小心为此,因为这些计算在双精度算术中失败。

|
  • 打印
  • 发电子邮件

评论

要发表评论,请点击在这里要登录您的MathWorks帐户或创建新的。