通常谈到最大公因子时, 我们都会提到一个非常基本的事实: 给予二整数 a 与 b, 必存在有整数 x 与 y 使得ax + by = gcd(a,b)。有两个数a,b,对它们进行辗转相除法,可得它们的最大公约数——这是众所周知的。然后,收集辗转相除法中产生的式子,倒回去,可以得到ax+by=gcd(a,b)的整数解。
#扩展欧几里得算法 defext_gcd(a, b): if b == 0: return1, 0, a else: x, y, gcd = ext_gcd(b, a % b) #递归直至余数等于0(需多递归一层用来判断) x, y = y, (x - (a // b) * y) #辗转相除法反向推导每层a、b的因子使得gcd(a,b)=ax+by成立 return x, y, gcd
# -*- coding: UTF-8 -*- defGet_Mi(m_list, M):# 获取所有的Mi M_list = [] for mi in m_list: M_list.append(M // mi) return M_list
defGet_ei_list(M_list, m_list):# 取所有的Mi的逆元 ei_list = [] for i inrange(len(M_list)): ei_list.append(Get_ei(M_list[i], m_list[i])[0]) return ei_list
defGet_ei(a, b): // 使用扩展欧几里得算法求解逆元 # 计算ei
if0 == b: x = 1 y = 0 q = a return x, y, q xyq = Get_ei(b, a % b) x = xyq[0] y = xyq[1] q = xyq[2] temp = x x = y y = temp - a // b * y return x, y, q
defcrt(a_list, m_list): # 计算中国剩余定理,返回计算结果 M = 1# M是所有mi的乘积 for mi in m_list: M *= mi Mi_list = Get_Mi(m_list, M) Mi_inverse = Get_ei_list(Mi_list, m_list) x = 0 for i inrange(len(a_list)): # 开始计算x x += Mi_list[i] * Mi_inverse[i] * a_list[i] x %= M return x
defis_prime(num): if num > 1: if num == 2: print("Yes") return1 if num % 2 == 0: print("No") return0 for i inrange(3, int(math.sqrt(num) + 1), 2): if num % i == 0: print("No") return0 print("Yes") return1 print("No") return0
defEvidence(number): p=[2,3,5,7] # 为小素数集合 q=[] # 用于存储全部的数,然后筛选 for i inrange(8,int(math.sqrt(number))+1): # 找开方后范围的质数 flag=0 for j inrange(2,i): if i%j==0: flag=1 break if flag==0: p.append(i)
for k inrange(2,number+1): # 全部的数,然后进行筛选 q.append(k) for i in p: for j in q: if j % i == 0://去除倍数值
q.remove(j) for i inrange(len(q)): p.append(q[i]) print(p)
from concurrent.futures import ProcessPoolExecutor import math
# 素性判断函数,求余法 defis_prime(num): if num > 1: if num == 2: returnTrue if num % 2 == 0: returnFalse for x inrange(3, int(math.sqrt(num) + 1), 2): if num % x == 0: returnFalse returnTrue returnFalse
# 通过调用is_prime,设计并发函数实现对多个大素数的判断 defmain(): with ProcessPoolExecutor() as exeu: for i in exeu.map(is_prime, PRIMES): print(i) if __name__ == '__main__': PRIMES=list(map(int,input().split(","))) main()