Python で素因数分解
http://my-notes.hatenablog.com/entry/2017/11/19/022246
結果の表示が特殊
sympy がインストールされていない場合は,事前に一度だけ
$ python3 -m pip install sympy
その後,
$ python3
>>> import sympy as sym
>>> sym.factorint(12878)
{2: 1, 47: 1, 137: 1}
>>> sym.factorint(111111111111111111111111111111111111111111111111111111111111111)
{3: 2, 37: 1, 43: 1, 239: 1, 1933: 1, 4649: 1, 10837: 1, 23311: 1, 45613: 1, 333667: 1, 45121231: 1, 10838689: 1, 1921436048294281: 1}
>>> start=time.time();sym.factorint(11111111111111111111111111111111111111111111111111111111111111111111);print(time.time()-start)
{11: 1, 101: 1, 103: 1, 4013: 1, 2071723: 1, 28559389: 1, 1491383821: 1, 5363222357: 1, 21993833369: 1, 2324557465671829: 1}
1.9484901428222656 # 1.9 秒かかりました
R で素因数分解
gmp がインストールされていない場合は,事前に一度だけ
> install.packages("gmp")
gmp を使う前に
> library(gmp)
その後,
> factorize(12878)
Big Integer ('bigz') object of length 3:
[1] 2 47 137
> factorize(as.bigz("111111111111111111111111111111111111111111111111111111111111111"))
Big Integer ('bigz') object of length 14:
[1] 3 3 37 43 239 1933 4649
[8] 10837 23311 45613 333667 45121231 10838689 1921436048294281
> system.time(print(factorize(as.bigz("11111111111111111111111111111111111111111111111111111111111111111111"))))
Big Integer ('bigz') object of length 10:
[1] 11 101 103 4013 2071723 28559389 1491383821
[8] 5363222357 21993833369 2324557465671829
ユーザ システム 経過
0.03 0.00 0.03 # 0.03秒でした