Class: Fixnum
Instance Method Summary collapse
-
#fact ⇒ Object
x! ( specially for /c/ ^__^ ) 5.fact # => 120 x3 boost relative to 1.8.7.
-
#factorize ⇒ Object
timer(100000) 10737418231073741823.factorize => “res: [3, 3, 7, 11, 31, 151, 331], one: 0.0053ms, total: 530.0ms” ruby count Bignums starting from 2**30 < 2**30: x1-x30 speed, >= 2**30: x1 - x3 speed ~_~ Caution! It can just hung up on numbers over 2**64 and you’ll have to kill it -9 And this shit doesn’t think if you have 64-bit system, so it could be faster a bit.
Instance Method Details
#fact ⇒ Object
x! ( specially for /c/ ^__^ ) 5.fact # => 120 x3 boost relative to 1.8.7
415 416 417 418 419 420 421 422 423 |
# File 'ext/rmtools.cpp', line 415 static VALUE rb_math_factorial(VALUE x) { long a = FIX2LONG(x); for (int i = 2; i < a; i++) x = TYPE(x) == T_BIGNUM ? rb_big_mul(x, rb_int2big(i)) : rb_big_mul(rb_int2big(FIX2LONG(x)), rb_int2big(i)); return x; } |
#factorize ⇒ Object
timer(100000) Fixnum.10737418231073741823.factorize
> “res: [3, 3, 7, 11, 31, 151, 331], one: 0.0053ms, total: 530.0ms”
ruby count Bignums starting from 2**30 < 2**30: x1-x30 speed, >= 2**30: x1 - x3 speed ~_~ Caution! It can just hung up on numbers over 2**64 and you’ll have to kill it -9 And this shit doesn’t think if you have 64-bit system, so it could be faster a bit
443 444 445 446 447 448 449 450 451 452 453 454 455 456 457 458 |
# File 'ext/rmtools.cpp', line 443 static VALUE rb_math_factorization(VALUE x) { VALUE factors = rb_ary_new2(31); int len = 0; long y = FIX2LONG(x); long n = 2; while (n*n <= y) { if (y%n == 0) { y /= n; rb_ary_store(factors, len++, LONG2FIX(n)); } else n++; } rb_ary_store(factors, len++, LONG2FIX(y)); ARY_SET_LEN(factors, len); return factors; } |