想当年小学时,质因数分解都是手算滴。现在不同啦,虽然大数的质因数分解是NP问题,不过小一点的数还是可以在有限时间内用计算机算出来的。
方法一:
借用Linux下的factor命令:
azalea@ubuntu:~$ factor 2123324321435364678
2123324321435364678: 2 3 353887386905894113
azalea@ubuntu:~$ factor 31233243214353646789
factor: `31233243214353646789′ is too large
不知道上限到底是多少,不超过19位看来是没问题。
于是python代码可以写成:
>>> import os
>>> def factor(num):
… stdout = os.popen(’factor %d’%num)
… s = stdout.read().strip()
… return map(int, s[s.index(':')+2:].split(’ ‘))
…
>>> factor(28)
[2, 2, 7]
方法二:
使用SymPy, ‘a Python library for symbolic mathematics’.
Ubuntu下直接 sudo apt-get install python-sympy,然后
>>> import sympy
>>> sympy.factorint(2523324321435364678901)
[(31, 1), (107, 1), (760724848186724353L, 1)]
>>> sympy.factorint(3123324321435364678901)
等啊等啊,等了几分钟都没反应。。。看来sympy能搞定21位整数。
(还没人喜欢)
1条留言 跳到评论框
等我以后看得懂的时候我再来看-.-
[回复这条留言]