describe Integer, "#modulo_order" do @seq = { # A002326 2 => [1,2,4,3,6,10,12,4,8,18,6,11,20,18,28,5,10,12,36, 12,20,14,12,23,21,8,52,20,18,58,60,6,12,66,22,35, 9,20,30,39,54,82,8,28,11,12,10,36,48,30,100,51,12, 106,36,36,28,44,12,24,110,20,100,7,14,130,18,36, 68,138,46,60,28], # A050975 3 => [1,2,4,6,2,4,5,3,6,4,16,18,4,5,11,20,3,6,28,30,8, 16,12,18,18,4,8,42,10,11,23,42,20,6,52,20,6,28,29, 10,30,16,12,22,16,12,35,12,18,18,30,78,4,8,41,16, 42,10,88,6,22,23,36,48,42,20,100,34,6,52,53,27,20, 12], # A050976 4 => [1,2,3,3,5,6,2,4,9,3,11,10,9,14,5,5,6,18,6,10,7,6, 23,21,4,26,10,9,29,30,3,6,33,11,35,9,10,15,39,27, 41,4,14,11,6,5,18,24,15,50,51,6,53,18,18,14,22,6, 12,55,10,50,7,7,65,9,18,34,69,23,30,14,21,74,15, 12,10,26], # A050977 5 => [1,2,1,2,6,2,6,5,2,4,6,4,16,6,9,6,5,22,2,4,18,6, 14,3,8,10,16,6,36,9,4,20,6,42,5,22,46,4,42,16,4, 52,18,6,18,14,29,30,3,6,16,10,22,16,22,5,6,72,36, 9,30,4,39,54,20,82,6,42,14,10,44,12,22,6,46,8,96, 42,30,25,16], # A050978 6 => [1,2,10,12,16,9,11,5,14,6,2,4,40,3,23,14,26,10,58, 60,12,33,35,36,10,78,82,16,88,12,9,12,10,102,106, 108,112,11,16,110,25,126,130,18,136,23,60,14,37, 150,6,156,22,27,83,156,43,10,178,60,4,80,19,96,14, 198,14], # A050979 7 => [1,1,2,4,1,2,3,4,10,2,12,4,2,16,3,3,4,10,22,2,4, 12,9,7,4,15,4,10,16,6,9,3,12,4,40,6,10,12,22,23,2, 4,16,12,26,9,20,3,7,29,4,60,15,8,12,10,66,16,22, 70,6,24,9,4,6,12,78,4,27,40,41,16,6,7,10,88,12,22, 15,23,12], # A050980 8 => [2,4,1,2,10,4,4,8,6,2,11,20,6,28,5,10,4,12,4,20, 14,4,23,7,8,52,20,6,58,20,2,4,22,22,35,3,20,10,13, 18,82,8,28,11,4,10,12,16,10,100,17,4,106,12,12,28, 44,4,8,110,20,100,7,14,130,6,12,68,46,46,20,28,14, 148,5], # A050981 9 => [1,1,2,3,1,2,5,3,3,2,8,9,2,5,11,10,3,3,14,15,4,8, 6,9,9,2,4,21,5,11,23,21,10,3,26,10,3,14,29,5,15,8, 6,11,8,6,35,6,9,9,15,39,2,4,41,8,21,5,44,3,11,23, 18,24,21,10,50,17,3,26,53,27,10,6,56,22,14,29,24, 5,5,15], # A002329 10 =>[1,6,1,2,6,16,18,6,22,3,28,15,2,3,6,5,21,46,42,16, 13,18,58,60,6,33,22,35,8,6,13,9,41,28,44,6,15,96, 2,4,34,53,108,3,112,6,48,22,5,42,21,130], } @seq.each do |base, values| 1.upto(100) do |n| mo = base.modulo_order(n) value = mo.zero? ? 0 : values.shift it "returns #{value} for the multiplicative order of base #{base} (mod #{n})" do mo.should == value end break if values.empty? end end end