[前][次][番号順一覧][スレッド一覧]

ruby-changes:12392

From: yugui <ko1@a...>
Date: Mon, 13 Jul 2009 22:52:07 +0900 (JST)
Subject: [ruby-changes:12392] Ruby:r24091 (trunk): * lib/prime.rb (Prime#prime_division): now decomposes

yugui	2009-07-13 22:51:49 +0900 (Mon, 13 Jul 2009)

  New Revision: 24091

  http://svn.ruby-lang.org/cgi-bin/viewvc.cgi?view=rev&revision=24091

  Log:
    * lib/prime.rb (Prime#prime_division): now decomposes
      negative integer into a decomposition with element [-1, 1].
    
    * test/test_prime.rb: test for it.

  Modified files:
    trunk/ChangeLog
    trunk/lib/prime.rb
    trunk/test/test_prime.rb

Index: ChangeLog
===================================================================
--- ChangeLog	(revision 24090)
+++ ChangeLog	(revision 24091)
@@ -1,3 +1,10 @@
+Mon Jul 13 22:49:50 2009  Yuki Sonoda (Yugui)  <yugui@y...>
+
+	* lib/prime.rb (Prime#prime_division): now decomposes
+	  negative integer into a decomposition with element [-1, 1].
+
+	* test/test_prime.rb: test for it.
+
 Mon Jul 13 22:28:03 2009  NAKAMURA Usaku  <usa@r...>
 
 	* io.c (pipe_open): handles leaked on win32 when an error occurs.
Index: lib/prime.rb
===================================================================
--- lib/prime.rb	(revision 24090)
+++ lib/prime.rb	(revision 24091)
@@ -194,7 +194,12 @@
   #
   def prime_division(value, generator= Prime::Generator23.new)
     raise ZeroDivisionError if value == 0
-    pv = []
+    if value < 0
+      value = -value
+      pv = [[-1, 1]]
+    else
+      pv = []
+    end
     for prime in generator
       count = 0
       while (value1, mod = value.divmod(prime)
Index: test/test_prime.rb
===================================================================
--- test/test_prime.rb	(revision 24090)
+++ test/test_prime.rb	(revision 24091)
@@ -98,10 +98,15 @@
     def test_prime_division
       pd = PRIMES.inject(&:*).prime_division
       assert_equal PRIMES.map{|p| [p, 1]}, pd
+
+      pd = (-PRIMES.inject(&:*)).prime_division
+      assert_equal [-1, *PRIMES].map{|p| [p, 1]}, pd
     end
 
     def test_from_prime_division
       assert_equal PRIMES.inject(&:*), Integer.from_prime_division(PRIMES.map{|p| [p,1]})
+
+      assert_equal -PRIMES.inject(&:*), Integer.from_prime_division([[-1, 1]] + PRIMES.map{|p| [p,1]})
     end
 
     def test_prime?

--
ML: ruby-changes@q...
Info: http://www.atdot.net/~ko1/quickml/

[前][次][番号順一覧][スレッド一覧]