python逻辑量是什么意思_python-此过程的逻辑是什么

fundamental theorem of arithmetic指出,每个大于1的整数都可以表示为质数的乘积.例如,数字2100可以这样表示:

2 x 2 x 3 x 5 x 5 x 7

我已经安排好了,因此最大的素因数在右边,在这种情况下为7.此算法的作用是从2开始除以n(即“去除”该因数),直到不再有要去除的(模数)为止. 0步会在除法之前检查其是否完全可整除.)

因此,按照代码,我们将有i = 2和n = 2100,或者

2 x 2 x 3 x 5 x 5 x 7

2100被2(2100%2 == 0)整除,也是因为我们在上面的分解中看到2.因此将其除以2得到1050,或者

2 x 3 x 5 x 5 x 7

继续除以2,得到的数字不再是2的整数,即525,或者

3 x 5 x 5 x 7

然后我们将i增加到3并继续.看看到最后我们将如何获得最高质数因子?

第一个while循环的原因是i * i< n(实际上应该是i * i< = n)是因为

if one divisor or factor of a number (other than a perfect square) is greater than its square root, then the other factor will be less than its square root. Hence all multiples of primes greater than the square root of n need not be considered.

因此,如果i大于n的平方根,则意味着所有剩余因子在n的平方根之下都具有一个已经找到的“对”. i * i< = n所使用的检查是等效的,但比平方根计算快.

之所以如此之快而其他蛮力方法之所以如此之慢,是因为这是在每个步骤中对数字进行除法,从而成倍地减少了需要执行的步骤.

看到这一点,素数分解为600851475143是

71 x 839 x 1471 x 6857

并且如果您将代码修改为以下内容:

n = 600851475143

i = 2

while i * i <= n:

while n%i == 0:

print "Dividing by %d" % i

n = n / i

i = i + 1

if n > 1:

print n

你会看到的:

>>>

Dividing by 71

Dividing by 839

Dividing by 1471

6857

向您显示这正是它的工作方式.

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值