素因数分解する方法で取りあえず書いてみましたが、速度計測はしてません。
lang
1require "prime"
2
3def foo(n)
4 Prime.int_from_prime_division(
5 n.prime_division.map { |p,q| [p,q/2*2] }
6 )
7end
追記:
1から100万まで実行して計測してみました。
lang
1require "benchmark"
2n = 1_000_000
3Benchmark.bm do |x|
4 x.report { 1.upto(n) do |i|; f(i); end }
5 x.report { 1.upto(n) do |i|; foo(i); end }
6end
7#=> user system total real
8 64.900000 0.030000 64.930000 ( 64.934020)
9 50.840000 0.000000 50.840000 ( 50.853634)
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。