【算法笔记】手动开平方

  • 终于可以摆脱计算器了!
  • 本文为博主原创,未经许可不得转载

算法流程

(1)设要开方的数为$A$,将两两分组,如$7586$写成$75’86$,而$78965$写成$7’89’65$

(2)将第一位开方:即计算$x_1^2<=A_1$,如$75’86$就是要计算$x_1^2<=75$的最大的$x_1$,也就是$8$

然后将$A_1^2$,也就是$64$写下来,相减抄下去,如图所示:

(3)下移两位(普通的除法是下移一位,但在这里需要移两位),然后将当前商乘以$20$,计算$(20x_1+x_2)x_2<=A_2$

如上例中,就是把$8$乘以$20$,然后计算$16A \times A <=1168$,解得$A_max=6$

将$166\times6$的结果写下来相减,如图所示:

(4)重复(3)过程即可,只要你想,你可以不断开下去,当然你可能发现了,越往后计算越复杂

如图所示:

  

  

算法原理

我们假设结果是$$P=\sum_{i=0}^{n}10^ia_i $$

那么我们尝试把$P$平方,即$$P^2=\sum_{i=0}^{n} (10^{2i} a^{2i}+ 2\times10^i a_i \sum_{j=i+1}^{n}10^ja_j )$$

$$P^2=\sum_{i=0}^{n} 10^i a^i(10^i a^i + 2 \sum_{j=i+1}^{n}10^ja_j )$$

接下来我们考虑各项的意义:

$10^i a^i$就是当前位置的数

$2 \sum_{j=i+1}^{n}10^ja_j$就是当前位前面的位的累加和乘以2的结果

我们的思想是逐位确定

首先确定第一位,方法是显然的

然后假设后面的位都是$0$,然后按照上面的式子求解最小的符合条件的当前位的值

这样不断地逐位进行确定就可以实现手动开平方

文章目录
  1. 1. 算法流程
  2. 2. 算法原理
,