原理
待补充
假设
大数平方根逐比特验证法算法步骤
设:待求平方根的大数为n;n的2进制表示形式位长为l;
容易验证n的平方根的整数部分2进制表示形式位长为ceil(l/2);
算法流程
1)令shift = ceil(l/2)-1;
令mask = 2^shift
令sqrt_n = mask;
令tmp = mask*2^shift
更新N的值:n=n-tmp;
2)如果 shift 大于等于1,进入下一步,否则返回sqrt_n值;
更新shift:shift=shift-1;
更新mask = 2^shift;
令tmp =(2*sqrt_n+mask)*2^shift
如果tmp < = n:
sqrt_n = sqrt_n + mask
n = n-tmp
跳到步骤2)进行循环;
源代码
from math import ceil, sqrt
def bit_by_bit_sqrt(n):
len_bi_sq