合数可以表达成素数的乘积,且表达式是唯一,记,其中,如在研究合数时,将其分解成素数的乘积,是一种通用的方法,但是,将合数进行分解是很难的,尤其是大的合数,即便用计算机也是很难得到结果的计算机要计算200位的数相乘比较容易些,但要对200位的数进行分解,计算量是很大的,而且,数学家们到现在也没有找到便捷的分解方法所以,用大的素数作为密码,安全性是有保障的,比如一个合数只能分解成两个几百位的素数相乘,其中一个素数作为密码,如果想通过分解这个合数来得到密码,那有生之年估计看不到结果当然,量子计算机或许能解决这个问题,但量子计算机毕竟未成熟,我来为大家科普一下关于初等数论最大公约数与辗转相除法?以下内容希望对你有帮助!

初等数论最大公约数与辗转相除法(两数公因子求解的辗转相除法)

初等数论最大公约数与辗转相除法

合数可以表达成素数的乘积,且表达式是唯一,记,其中,如。在研究合数时,将其分解成素数的乘积,是一种通用的方法,但是,将合数进行分解是很难的,尤其是大的合数,即便用计算机也是很难得到结果的。计算机要计算200位的数相乘比较容易些,但要对200位的数进行分解,计算量是很大的,而且,数学家们到现在也没有找到便捷的分解方法。所以,用大的素数作为密码,安全性是有保障的,比如一个合数只能分解成两个几百位的素数相乘,其中一个素数作为密码,如果想通过分解这个合数来得到密码,那有生之年估计看不到结果。当然,量子计算机或许能解决这个问题,但量子计算机毕竟未成熟。

相比于分解合数,寻找两个合数的公因子可能会简单些,使用辗转相除法可有效地解决,举例说明:求5702697与27649206的公因子。参看如下的计算步骤:

计算结束,两数的公因子为117。事实上,,,两数的公因子为。

上述的计算方法,可以写个小程序来求解,代码如下(python):

def fzhzh(n1,n2):

n_max=max(n1,n2)

n_min=min(n1,n2)

n_mod=n_max%n_min

if n_mod==0:

print('公因子为:' str(n_min))

break

n_max=n_min

n_min=n_mod

,