def getGCD(a, b): num1 = mpz(rint_round(a)) num2 = mpz(rint_round(b)) # if num2%num1 ==0: # return num1 gcd_a_b = gcd(num1, num2) return gcd_a_b
def check(self, i): #区间大小 diff = self.right - self.left #新的左右区间 curleft = self.left + diff * self.lp1[i] curright = self.left + diff * self.rp1[i] #读取的数转化为小数 decimal = gmpy2.mpfr(self.cur / self.log10) decimal = decimal - gmpy2.floor(decimal) #判断是否满足要求 if curleft > decimal: return False if curright < decimal: return False #更新区间 self.left = curleft self.right = curright #通过decimal计算新的cur,抛弃掉cur前导多余数字,cur维持为整数防止精度缺失 self.cur = decimal*self.log10 self.cur = gmpy2.rint_round(self.cur) return True
def mpfr_roundToIntegral(rm, a): assert isinstance(a, MPF) if rm == RM_RNA: with gmpy2.local_context(mpfr_context(a)): mpfr_a = mpf_to_mpfr(a) mpfr_r = gmpy2.rint_round(mpfr_a) return mpfr_to_mpf(mpfr_r) else: check_rm(rm) with gmpy2.local_context(mpfr_context(a, rm)): mpfr_a = mpf_to_mpfr(a) mpfr_r = gmpy2.rint(mpfr_a) return mpfr_to_mpf(mpfr_r)
def __init__(self, n): self.n = n self.n_sq = n * n self.g = n + 1 self.bits = mpz(rint_round(log2(self.n)))
def __init__(self, n): self.n = n self.n_sq = n * n self.g = n + 1 self.bits=mpz(rint_round(log2(self.n)))