2015年12月12日土曜日

151212(2)

Ruby


Chebyshev's bias(2)

もう少し調べてみた。

require 'prime'

def f(n)
  ary = []
  cnt1, cnt2, cnt3 = 0, 0, 0
  # cnt1 > cnt3 となることは滅多にないのでたくさんの素数を用意
  Prime.each(n).each{|i|
    if i > 2
      i % 4 == 1? cnt1 += 1 : cnt3 += 1
    else
      cnt2 += 1
    end
    ary << i if cnt1 > cnt3
  }
  ary
end

p f(5 * 10 ** 8)

出力結果
[26861, 616841, 616849, 616877, 616897, 616909, 616933, 616943, 616951, 616961, 616991, 616997, 616999, 617011, 617269, 617273, 617293, 617311, 617327, 617333, 617339, 617341, 617359, 617369, 617401, 617429, 617453, 617521, 617537, 617689, 617693, 617699, 617717, 622813, 622849, 622861, 622879, 622889, 622901, 622927, 622943, 622957, 622967, 622987, 622997, 623003, 623009, 623017, 623023, 623041, 623057, 623059, 623071, 623107, 623209, 623221, 623261, 623263, 623269, 623279, 623281, 623291, 623299, 623321, 623341, 623353, 623401, 623417, 623423, 623437, 623477, 623521, 623531, 623537, 623563, 623591, 623617, 623621, 623633, 623641, 623653, 623669, 623671, 623677, 623681, 623683, 623699, 623717, 623719, 623723, 623729, 623743, 623759, 623767, 623771, 623803, 623933, 623957, 623977, 623989, 624097, 624133, 624149, 624241, 626929, 626953, 627353, 627377, 627379, 627449, 627481, 627733, 627749, 627773, 627787, 627791, 627797, 627799, 627841, 627901, 628013, 628021, 628037, 628049, 628051, 628057, 628063, 628093, 628097, 628127, 628139, 628171, 628183, 628189, 628193, 628207, 628213, 628217, 628219, 628231, 628261, 628267, 628289, 628301, 628319, 628357, 628363, 628373, 628379, 628391, 628399, 628937, 628973, 628993, 628997, 629003, 629009, 629011, 629023, 629029, 629059, 629081, 629113, 629137, 629143, 629171, 629177, 629203, 629243, 629249, 629263, 629281, 629311, 629341, 629429, 629449, 629467, 629513, 629537, 629567, 629569, 629591, 629593, 629609, 629611, 629617, 629623, 629653, 629683, 629687, 629689, 629701, 629711, 629723, 629737, 629743, 630737, 630797, 630803, 632813, 632897, 633013, 633037, 633053, 633067, 633079, 633133, 633161, 633197, 633209, 633221, 633253, 633257, 633263, 633271, 633287, 633307, 633317, 633337, 633359, 633377, 633379, 633383, 633401, 633407, 633449, 633461, 633463, 633469, 633473, 633487, 633497, 633559, 633569, 633571, 633649, 633653, 633667, 633797, 12306137, 12306149, 12306157, 12306187, 12306193, 12306197, 12306211, 12306223, 12306241, 12306253, 12306269, 12306277, 12306313, 12306331, 12306341, 12306367, 12306373, 12306379, 12306407, 12306409, 12306421, 12306431, 12306439, 12306443, 12306457, 12306461, 12306467, 12306479, 12306517, 12308113, 12308117, 12308123, 12308141, 12308173, 12308201, 12308207, 12308227, 12308237, 12308249, 12308269, 12308297, 12308327, 12308339, 12308353, 12308393, 12308399, 12308411, 12308419, 12308423, 12308453, 12308467, 12308507, 12308509, 12308539, 12308573, 12309893, 12309961, 12310013, 12310019, 12310021, 12310027, 12310033, 12310073, 12310079, 12310093, 12310097, 12310121, 12310147, 12310153, 12310163, 12310187, 12310219, 12310229, 12310253, 12310279, 12310289, 12310301, 12310303, 12310321, 12310327, 12310357, 12310369, 12310387, 12310411, 12310421, 12310429, 12310439, 12310447, 12310453, 12310481, 12310489, 12310511, 12310531, 12310541, 12310547, 12310549, 12310591, 12310607, 12310609, 12310621, 12310637, 12310657, 12310667, 12310679, 12310687, 12310699, 12310721, 12310733, 12310741, 12310759, 12310801, 12310817, 12310847, 12310849, 12310861, 12310867, 12310871, 12310889, 12310913, 12310927, 12310931, 12310933, 12310951, 12310967, 12310979, 12310997, 12311017, 12311023, 12311027, 12311053, 12311059, 12311063, 12311087, 12311093, 12311113, 12311119, 12311137, 12311147, 12311149, 12311153, 12311191, 12311207, 12311209, 12311219, 12311251, 12311261, 12311267, 12311333, 12311401, 12311657, 12311837, 12311869, 12311881, 12311911, 12311917, 12311933, 12311939, 12311951, 12311977, 12311983, 12311989, 12312011, 12312017, 12312023, 12312197, 12312217, 12312221, 12312227, 12312241, 12312263, 12312277, 12312281, 12312283, 12312331, 12312347, 12312353, 12312359, 12312397, 12312401, 12312407, 12312413, 12312427, 12312431, 12312457, 12312497, 12312557, 12312581, 12312661, 12312689, 12312701, 12312719, 12312737, 12312763, 12313309, 12313333, 12313337, 12313339, 12313361, 12313363, 12313369, 12313381, 12313393, 12313409, 12313447, 12313451, 12313513, 12313537, 12313549, 12313573, 12313591, 12313619, 12313633, 12313657, 12313663, 12313669, 12313673, 12313703, 12313709, 12313747, 12313751, 12313759, 12313783, 12313787, 12313799, 12313801, 12313813, 12313877, 12313907, 12313909, 12313927, 12313937, 12313999, 12314011, 12314023, 12314051, 12314321, 12314333, 12314353, 12314363, 12314369, 12314381, 12314417, 12314429, 12314431, 12314459, 12314479, 12314483, 12314509, 12314513, 12314537, 12314563, 12314569, 12314587, 12314597, 12314629, 12314633, 12314639, 12314651, 12314677, 12314689, 12314699, 12314767, 12314773, 12314789, 12314791, 12314803, 12314807, 12314837, 12314839, 12314873, 12314891, 12314903, 12314909, 12314941, 12314947, 12314971, 12314993, 12315001, 12315013, 12315077, 12315101, 12315103, 12315109, 12315113, 12315131, 12315161, 12315187, 12315209, 12315223, 12315241, 12315253, 12315271, 12315283, 12315299, 12315301, 12315323, 12315349, 12315353, 12315367, 12315371, 12315383, 12315403, 12315427, 12315449, 12315461, 12315467, 12315469, 12315481, 12315493, 12315509, 12315521, 12315529, 12315559, 12315577, 12315581, 12315613, 12315617, 12315631, 12315643, 12315647, 12315659, 12315661, 12315671, 12315679, 12315707, 12315713, 12315727, 12315811, 12315829, 12315841, 12315851, 12315881, 12315883, 12315929, 12315943, 12315967, 12315991, 12316033, 12316037, 12316061, 12316081, 12316091, 12316093, 12316111, 12316133, 12316151, 12316159, 12316169, 12316181, 12316219, 12316223, 12316229, 12316231, 12316259, 12316267, 12316289, 12316321, 12316349, 12316357, 12316391, 12316399, 12316411, 12316429, 12316433, 12316439, 12316457, 12316471, 12316529, 12316531, 12316547, 12316589, 12316609, 12316627, 12316631, 12316639, 12316643, 12316691, 12316697, 12316699, 12316709, 12316727, 12316741, 12316747, 12316783, 12316813, 12316831, 12316853, 12316861, 12316873, 12316879, 12316901, 12316903, 12316949, 12316957, 12316979, 12317177, 12317209, 12317233, 12317251, 12317273, 12317281, 12317287, 12317297, 12317309, 12317311, 12317317, 12317321, 12317329, 12317341, 12317353, 12317381, 12317407, 12317423, 12317441, 12317467, 12317471, 12317483, 12317497, 12317531, 12317563, 12317573, 12317587, 12317597, 12317623, 12317647, 12317693, 12317729, 12317743, 12317771, 12317797, 12317803, 12317813, 12317827, 12317831, 12317863, 12317869, 12317897, 12317923, 12317927, 12317939, 12317941, 12317957, 12317971, 12317983, 12317989, 12317993, 12318043, 12318071, 12318221, 12319753, 12319777, 12319793, 12321149, 12321161, 12322001, 12322217, 12322237, 12322301, 12322309, 12322333, 12322337, 12322351, 12322391, 12322397, 12322421, 12322423, 12322451, 12322523, 12322529, 12322543, 12322577, 12322579, 12322613, 12322631, 12322649, 12323357, 12323693, 12323713, 12323737, 12323777, 12323783, 12323789, 12323797, 12323807, 12323809, 12323813, 12323851, 12323863, 12323887, 12323897, 12323911, 12323977, 12323981, 12323999, 12324041, 12324077, 12324107, 12324127, 12324139, 12324161, 12324163, 12324203, 12324209, 12324211, 12324229, 12324233, 12324239, 12324253, 12324271, 12324353, 12324409, 12324413, 12324419, 12324437, 12324497, 12324607, 12324629, 12324647, 12324659, 12324679, 12324769, 12324821, 12325057, 12325069, 12325081, 12325099, 12325121, 12325123, 12325141, 12327857, 12327881, 12327883, 12327901, 12327949, 12328037, 12328181, 12328189, 12328223, 12332989, 12332993, 12333001, 12333017, 12333019, 12333031, 12333043, 12333073, 12333089, 12333103, 12333107, 12333157, 12334841, 12334873, 12334897, 12334909, 12334913, 12334919, 12334939, 12334943, 12335093, 12350017, 12350033, 12350053, 12350069, 12350081, 12350083, 12350087, 12350089, 12350099, 12350141, 12350153, 12350161, 12350197, 12350203, 12350207, 12350249, 12350281, 12350309, 12350321, 12350339, 12350353, 12350357, 12350363, 12350383, 12350407, 12350419, 12350423, 12350453, 12350467, 12350479, 12350497, 12350501, 12350509, 12350543, 12350581, 12350641, 12350659, 12350671, 12350683, 12350693, 12350699, 12350773, 12350777, 12350783, 12350827, 12350837, 12350851, 12350861, 12350867, 12350873, 12350879, 12350887, 12350911, 12350929, 12350941, 12350951, 12350953, 12350971, 12350983, 12351011, 12351029, 12351041, 12351047, 12351049, 12351103, 12351133, 12351193, 12351203, 12351217, 12351221, 12351223, 12351233, 12351247, 12351263, 12351289, 12351319, 12351323, 12351329, 12351343, 12351359, 12351371, 12360421, 12360449, 12360457, 12360473, 12360497, 12360503, 12360527, 12360539, 12360541, 12360563, 12360611, 12360617, 12360619, 12360889, 12360937, 12360949, 12360977, 12361003, 12361007, 12361009, 12361021, 12361061, 12361067, 12361073, 12361093, 12361103, 12361177, 12361187, 12361199, 12361201, 12361211, 12361241, 12361249, 12361277, 12361303, 12361351, 12361379, 12361399, 12361403, 12361417, 12361429, 12361451, 12361513, 12361537, 12361543, 12361549, 12361577, 12361607, 12361619, 12361673, 12361729, 12361733, 12361753, 12361759, 12361793, 12361807, 12361813, 12361819, 12361829, 12361831, 12361847, 12361849, 12361871, 12361883, 12361889, 12361891, 12361897, 12361903, 12361933, 12361949, 12361961, 12361997, 12362003, 12362029, 12362041, 12362057, 12362059, 12362069, 12362071, 12362089, 12362099, 12362117, 12362123, 12362131, 12362143, 12362153, 12362159, 12362167, 12362173, 12362177, 12362209, 12362221, 12362227, 12362249, 12362257, 12362261, 12362263, 12362291, 12362297, 12362309, 12362327, 12362333, 12362347, 12362351, 12362353, 12362387, 12362393, 12362401, 12362411, 12362419, 12362423, 12362437, 12362461, 12362479, 12362489, 12362513, 12362531, 12362533, 12362557, 12362573, 12362593, 12362599, 12362611, 12362617, 12362633, 12362641, 12362653, 12362657, 12362659, 12362677, 12362717, 12362719, 12362737, 12362741, 12362759, 12362783, 12362797, 12362803, 12362827, 12362837, 12362839, 12362849, 12362851, 12362873, 12362879, 12362881, 12362899, 12362929, 12362951, 12362953, 12362957, 12362969, 12362981, 12362989, 12363007, 12363011, 12363031, 12363047, 12363049, 12363067, 12363083, 12363089, 12363133, 12363137, 12363139, 12363149, 12363161, 12363173, 12363179, 12363223, 12363227, 12363229, 12363271, 12363283, 12363311, 12363313, 12363331, 12363347, 12363349, 12363361, 12363371, 12363383, 12363401, 12363409, 12363413, 12363467, 12363479, 12363493, 12363497, 12363517, 12363521, 12363551, 12363569, 12363583, 12363629, 12363643, 12363647, 12363653, 12363667, 12363677, 12363691, 12363707, 12363731, 12363733, 12363739, 12363749, 12363751, 12363803, 12363817, 12363821, 12363829, 12363847, 12363859, 12363881, 12363887, 12363931, 12363941, 12363943, 12363973, 12363991, 12363997, 12364007, 12364019, 12364021, 12364057, 12364103, 12364111, 12364123, 12364129, 12364141, 12364181, 12364199, 12364213, 12364259, 12364267, 12364279, 12364283, 12364351, 12364357, 12364361, 12364367, 12364379, 12364393, 12364399, 12364403, 12364433, 12364441, 12364487, 12364489, 12364507, 12364537, 12364543, 12364591, 12364601, 12364603, 12364609, 12364613, 12364621, 12364637, 12364663, 12364669, 12364673, 12364699, 12364711, 12364717, 12364727, 12364733, 12364747, 12364757, 12364769, 12364789, 12364819, 12364837, 12364861, 12364879, 12364889, 12364897, 12364907, 12364909, 12364921, 12364927, 12364943, 12364949, 12364973, 12364981, 12364997, 12364999, 12365009, 12365033, 12365057, 12365071, 12365083, 12365113, 12365117, 12365153, 12365173, 12365179, 12365189, 12365201, 12365203, 12365207, 12365261, 12365291, 12365293, 12365303, 12365321, 12365347, 12365351, 12365369, 12365383, 12365389, 12365399, 12365407, 12365411, 12365413, 12365429, 12365449, 12365461, 12365473, 12365491, 12365501, 12365503, 12365519, 12365539, 12365567, 12365569, 12365581, 12365593, 12365597, 12365603, 12365611, 12365623, 12365627, 12365663, 12365677, 12365701, 12365711, 12365729, 12365741, 12365767, 12365777, 12365779, 12365797, 12365813, 12365819, 12365831, 12365833, 12365839, 12365891, 12365893, 12365911, 12365917, 12365923, 12365933, 12365939, 12365959, 12366023, 12366037, 12366041, 12366061, 12366071, 12366073, 12366083, 12366091, 12366113, 12366121, 12366139, 12366163, 12366173, 12366181, 12366187, 12366197, 12366247, 12366271, 12366287, 12366301, 12366337, 12366353, 12366401, 12366407, 12366421, 12366449, 12366451, 12366467, 12366493, 12366503, 12366509, 12366521, 12366527, 12366533, 12366569, 12366589, 12366619, 12366623, 12366631, 12366637, 12366643, 12366703, 12366721, 12366763, 12366779, 12366787, 12366791, 12366797, 12366811, 12366839, 12366859, 12366863, 12366869, 12366883, 12366899, 12366919, 12366961, 12366971, 12366979, 12366989, 12367027, 12367037, 12367039, 12367057, 12367067, 12367099, 12367111, 12367129, 12367141, 12367151, 12367163, 12367181, 12367189, 12367207, 12367259, 12367291, 12367297, 12367321, 12367331, 12367337, 12367339, 12367409, 12367417, 12367451, 12367457, 12367471, 12367489, 12367493, 12367501, 12367507, 12367559, 12367571, 12367573, 12367577, 12367591, 12367631, 12367637, 12367643, 12367669, 12367673, 12367679, 12367681, 12367697, 12367711, 12367723, 12367739, 12367759, 12367763, 12367769, 12367781, 12367783, 12367787, 12367793, 12367807, 12367819, 12367829, 12367837, 12367847, 12367867, 12367871, 12367877, 12367889, 12367897, 12367919, 12367967, 12367969, 12367973, 12367981, 12367991, 12368009, 12368017, 12368021, 12368029, 12368051, 12368053, 12368071, 12368087, 12368093, 12368099, 12368131, 12368143, 12368173, 12368203, 12368207, 12368233, 12368243, 12368269, 12368281, 12368309, 12368311, 12368329, 12368357, 12368381, 12368387, 12368393, 12368399, 12368417, 12368423, 12368437, 12368441, 12368443, 12368453, 12368459, 12368467, 12368479, 12368491, 12368507, 12368509, 12368513, 12368539, 12368579, 12368581, 12368591, 12368599, 12368621, 12368633, 12368651, 12368683, 12368689, 12368717, 12368729, 12368789, 12368813, 12368831, 12368833, 12368857, 12368861, 12368869, 12368887, 12368891, 12368893, 12368899, 12368903, 12368927, 12368933, 12368947, 12368971, 12369011, 12369017, 12369041, 12369043, 12369059, 12369073, 12369083, 12369103, 12369107, 12369113, 12369121, 12369127, 12369143, 12369157, 12369163, 12369169, 12369179, 12369187, 12369197, 12369199, 12369221, 12369223, 12369233, 12369257, 12369263, 12369277, 12369281, 12369317, 12369347, 12369349, 12369367, 12369443, 12369449, 12369451, 12369463, 12369479, 12369499, 12369503, 12369529, 12369541, 12369547, 12369613, 12369629, 12369671, 12369677, 12369719, 12369757, 12369781, 12369787, 12369809, 12369821, 12369839, 12369859, 12369869, 12369871, 12369887, 12369919, 12369941, 12369943, 12369953, 12369967, 12370003, 12370031, 12370049, 12370051, 12370079, 12370087, 12370091, 12370093, 12370109, 12370157, 12370201, 12370219, 12370229, 12370249, 12370307, 12370331, 12370357, 12370367, 12370381, 12370409, 12370429, 12370433, 12370439, 12370451, 12370483, 12370487, 12370499, 12370529, 12370549, 12370597, 12370601, 12370607, 12370621, 12370637, 12370639, 12370649, 12370651, 12370667, 12370681, 12370693, 12370697, 12370703, 12370717, 12370727, 12370741, 12370759, 12370763, 12370769, 12370777, 12370789, 12370801, 12370811, 12370837, 12370867, 12370871, 12370873, 12370877, 12370931, 12370949, 12370961, 12370979, 12370991, 12370999, 12371017, 12371027, 12371039, 12371113, 12371119, 12371123, 12371137, 12371153, 12371213, 12371221, 12371231, 12371239, 12371311, 12371323, 12371347, 12371351, 12371363, 12371369, 12371377, 12371423, 12371441, 12371453, 12371473, 12371497, 12371503, 12371519, 12371521, 12371543, 12371549, 12371551, 12371561, 12371629, 12371633, 12371647, 12371657, 12371663, 12371683, 12371687, 12371729, 12371741, 12371743, 12371747, 12371753, 12371761, 12371789, 12371803, 12371809, 12371819, 12371851, 12371867, 12371881, 12371921, 12371923, 12371929, 12371981, 12371987, 12371993, 12372001, 12372013, 12372043, 12372047, 12372077, 12372121, 12372127, 12372133, 12372163, 12372167, 12372169, 12372221, 12372223, 12372271, 12372289, 12372323, 12372331, 12372341, 12372377, 12372383, 12372397, 12372403, 12372431, 12372457, 12372461, 12372469, 12372499, 12372523, 12372527, 12372539, 12372559, 12372587, 12372599, 12372637, 12372653, 12372707, 12372739, 12372757, 12372761, 12372793, 12372809, 12372817, 12372859, 12372887, 12372907, 12372929, 12372931, 12372947, 12372953, 12372959, 12372961, 12372967, 12372973, 12372977, 12373001, 12373007, 12373019, 12373027, 12373033, 12373069, 12373117, 12373129, 12373177, 12373183, 12373187, 12373201, 12373219, 12373243, 12373253, 12373261, 12373289, 12373307, 12373357, 12373381, 12373397, 12373441, 12373447, 12373457, 12373463, 12373481, 12373507, 12373511, 12373519, 12373523, 12373561, 12373567, 12373583, 12373591, 12373597, 12373607, 12373631, 12373639, 12373661, 12373679, 12373721, 12373727, 12373729, 12373763, 12373771, 12373787, 12373847, 12373861, 12373871, 12373877, 12373891, 12373897, 12373901, 12373913, 12373927, 12373967, 12373969, 12373973, 12373987, 12374009, 12374027, 12374041, 12374051, 12374071, 12374077, 12374081, 12374101, 12374107, 12374119, 12374123, 12374143, 12374179, 12374191, 12374209, 12374231, 12374233, 12374237, 12374273, 12374279, 12374287, 12374309, 12374321, 12374353, 12374357, 12374359, 12374381, 12374389, 12374393, 12374407, 12374447, 12374477, 12374507, 12374543, 12374569, 12374573, 12374587, 12374597, 12374603, 12374629, 12374633, 12374641, 12374647, 12374651, 12374683, 12374693, 12374723, 12374731, 12374737, 12374749, 12374773, 12374777, 12374779, 12374783, 12374809, 12374821, 12374891, 12374893, 12374899, 12374951, 12374981, 12374993, 12375017, 12375029, 12375037, 12375043, 12375047, 12375059, 12375067, 12375161, 12375203, 12375221, 12375263, 12375281, 12375287, 12375301, 12375323, 12375379, 12375397, 12375401, 12375413, 12375437, 12375457, 12375469, 12375491, 12375499, 12375509, 12375511, 12375557, 12375569, 12375577, 12375581, 12375599, 12375641, 12375653, 12375661, 12375683, 12375691, 12375697, 12375703, 12375709, 12375719, 12375733, 12375743, 12375773, 12375823, 12375829, 12375887, 12375893, 12375907, 12375911, 12375917, 12375919, 12375929, 12375943, 12375947, 12375971, 12375989, 12376031, 12376043, 12376079, 12376097, 12376103, 12376109, 12376121, 12376157, 12376159, 12376183, 12376207, 12376211, 12376249, 12376271, 12376279, 12376291, 12376297, 12376313, 12376321, 12376337, 12376339, 12376361, 12376363, 12376367, 12376381, 12376411, 12376423, 12376433, 12376447, 12376477, 12376499, 12376519, 12376523, 12376541, 12376571, 12376577, 12376579, 12376603, 12376667, 12376669, 12376673, 12376681, 12376687, 12376729, 12376739, 12376751, 12376787, 12376801, 12376807, 12376811, 12376853, 12376879, 12376913, 12376927, 12376937, 12376943, 12376951, 12376993, 12377021, 12377033, 12377041, 12377047, 12377051, 12377063, 12377081, 12377087, 12377117, 12377119, 12377147, 12377159, 12377161, 12377177, 12377179, 12377213, 12377219, 12377237, 12377251, 12377257, 12377263, 12377279, 12377329, 12377333, 12377347, 12380293, 12380309, 12380321, 12380351, 12380413, 12380443, 12380447, 12380449, 12380453, 12380491, 12380503, 12380513, 12382313]

151212

Ruby


Chebyshev's bias(1)

オンライン整数列大辞典の
A199547(http://oeis.org/A199547/list)
と比較し、答え合わせしてみる。

require 'prime'

def A199547(n)
  ary = []
  cnt1, cnt2, cnt3 = 0, 0, 0
  # cnt1 > cnt3 となることは滅多にないのでたくさんの素数を用意
  Prime.each(10 ** 6).each{|i|
    if i > 2
      i % 4 == 1? cnt1 += 1 : cnt3 += 1
    else
      cnt2 += 1
    end
    if cnt1 > cnt3
      ary << i
      break if ary.size == n
    end
  }
  ary
end
ary = A199547(33)

# OEIS A199547のデータ
ary0 =
[26861,616841,616849,616877,616897,616909,616933,
 616943,616951,616961,616991,616997,616999,617011,
 617269,617273,617293,617311,617327,617333,617339,
 617341,617359,617369,617401,617429,617453,617521,
 617537,617689,617693,617699,617717]
# 一致の確認
p ary == ary0

2015年12月11日金曜日

151211

Ruby


mapしてflattenすることと flat_map との違い

違いがわかる例を考えてみた。

# 違いがないように見えるが…
ary0 = [[1, 2], [3, 4], [5, 6], [7, 8], [9, 10]]
p ary0.map{|i| i}.flatten
p ary0.flat_map{|i| i}
p ''

# 違いがある
ary1 = [[[[[1, 2], [3, 4]], [[5, 6]]], [[[7, 8]]]], [[[9, 10]]]]
p ary1.map{|i| i}.flatten
p ary1.flat_map{|i| i}
p ary1.flat_map{|i| i.flat_map{|j| j}}
p ary1.flat_map{|i| i.flat_map{|j| j.flat_map{|k| k}}}
p ary1.flat_map{|i| i.flat_map{|j| j.flat_map{|k| k.flat_map{|m| m}}}}
p ''

出力結果
[1, 2, 3, 4, 5, 6, 7, 8, 9, 10]
[1, 2, 3, 4, 5, 6, 7, 8, 9, 10]
""
[1, 2, 3, 4, 5, 6, 7, 8, 9, 10]
[[[[1, 2], [3, 4]], [[5, 6]]], [[[7, 8]]], [[9, 10]]]
[[[1, 2], [3, 4]], [[5, 6]], [[7, 8]], [9, 10]]
[[1, 2], [3, 4], [5, 6], [7, 8], 9, 10]
[1, 2, 3, 4, 5, 6, 7, 8, 9, 10]
""

2015年12月10日木曜日

151210(3)

Ruby


Number of partitions of n that do not contain 1 as a part(2)

第10 ** i 項を求めてみた。

def A002865(n)
  ps = Array.new(n + 1){0}
  ps[0] = 1
  (2..n).each{|num|
    (num..n).each{|i|
      ps[i] += ps[i - num]
    }
  }
  ps
end

(0..4).each{|i| p A002865(10 ** i)[-1]}

出力結果
0
12
21339417
933624404877723008811705095741
457349445931557250061922683900998814197008215918082809221689550699686607030908401654199943384262724122144

151210(2)

Ruby


Number of partitions of n that do not contain 1 as a part(1)

オンライン整数列大辞典の
A002865(http://oeis.org/A002865/list)
と比較し、答え合わせしてみる。

def A002865(n)
  ps = Array.new(n + 1){0}
  ps[0] = 1
  (2..n).each{|num|
    (num..n).each{|i|
      ps[i] += ps[i - num]
    }
  }
  ps
end
ary = A002865(50)

# OEIS A002865のデータ
ary0 =
[1,0,1,1,2,2,4,4,7,8,12,14,21,24,34,41,55,66,88,
 105,137,165,210,253,320,383,478,574,708,847,1039,
 1238,1507,1794,2167,2573,3094,3660,4378,5170,6153,
 7245,8591,10087,11914,13959,16424,19196,22519,
 26252,30701]
# 一致の確認
p ary == ary0

151210

Ruby


Number of ways to express 1 as the sum of unit fractions such that the sum of the denominators is n(2)

第100項まで求めてみた。

# 和因子はmin以上max以下
def partition(n, min, max)
  return [[]] if n == 0
  [max, n].min.downto(min).flat_map{|i| partition(n - i, min, i).map{|rest| [i, *rest]}}
end

def A051908(n)
  # 1 = 1, 1 = 1 / 1の一通り
  ary = [1]
  (2..n).each{|m|
    cnt = 0
    partition(m, 2, m).each{|ary|
      cnt += 1 if ary.inject(0){|s, i| s + 1 / i.to_r} == 1
    }
    ary << cnt
  }
  ary
end

p A051908(10 ** 2)

出力結果
[1, 0, 0, 1, 0, 0, 0, 0, 1, 1, 1, 0, 0, 0, 0, 1, 1, 1, 0, 1, 0, 3, 0, 1, 1, 1, 1, 2, 3, 2, 2, 1, 2, 2, 2, 4, 5, 5, 2, 4, 5, 5, 9, 4, 4, 6, 4, 4, 7, 8, 4, 10, 9, 9, 11, 8, 13, 13, 15, 16, 21, 18, 16, 22, 19, 18, 30, 24, 19, 26, 28, 26, 29, 35, 29, 44, 28, 47, 48, 43, 44, 59, 49, 51, 72, 65, 64, 79, 70, 78, 87, 98, 83, 110, 103, 96, 126, 101, 134, 137]

2015年12月9日水曜日

151209

Ruby


Number of ways to express 1 as the sum of unit fractions such that the sum of the denominators is n(1)

オンライン整数列大辞典の
A051908(http://oeis.org/A051908/list)
と比較し、答え合わせしてみる。
(実行時間は25分ほどかかる。)

# 和因子はmin以上max以下
def partition(n, min, max)
  return [[]] if n == 0
  [max, n].min.downto(min).flat_map{|i| partition(n - i, min, i).map{|rest| [i, *rest]}}
end

def A051908(n)
  # 1 = 1, 1 = 1 / 1の一通り
  ary = [1]
  (2..n).each{|m|
    cnt = 0
    partition(m, 2, m).each{|ary|
      cnt += 1 if ary.inject(0){|s, i| s + 1 / i.to_r} == 1
    }
    ary << cnt
  }
  ary
end
ary = A051908(88)

# OEIS A051908のデータ
ary0 =
[1,0,0,1,0,0,0,0,1,1,1,0,0,0,0,1,1,1,0,1,0,3,0,1,
 1,1,1,2,3,2,2,1,2,2,2,4,5,5,2,4,5,5,9,4,4,6,4,4,7,
 8,4,10,9,9,11,8,13,13,15,16,21,18,16,22,19,18,30,
 24,19,26,28,26,29,35,29,44,28,47,48,43,44,59,49,
 51,72,65,64,79]
# 一致の確認
p ary == ary0

2015年12月8日火曜日

151208

Ruby


分割の逆数和が1(1)

初等数学第77号の西山輝夫氏の記事に以下のようなことが書かれてあった。

「77より大きな整数は、適当な分割が存在して、分割した数の逆数(単位分数)の和を1にすることができる。」

例えば、n = 78 のとき、78 = 40 + 12 + 10 + 8 + 6 + 2, 1 = 1 / 40 + 1 / 12 + 1 / 10 + 1 / 8 + 1 / 6 + 1 / 2 とできます。
一方、n = 2 のとき、
分割の逆数和が1になることはありません。
よって、上記が正しいなら、
分割の逆数和が1にならないような最大のnが存在する
はずです。
そのnが23であることを
n ≦ 77 のとき、和因子が2以上の分割をすべて調べる
ことで確認しました。

# 和因子はmin以上max以下
def partition(n, min, max)
  return [[]] if n == 0
  [max, n].min.downto(min).flat_map{|i| partition(n - i, min, i).map{|rest| [i, *rest]}}
end

(2..77).each{|n|
  # nの分割で逆数和が1
  p [n, partition(n, 2, n).select{|ary| ary.inject(0){|s, i| s + 1 / i.to_r} == 1}]
}

出力結果
[2, []]
[3, []]
[4, [[2, 2]]]
[5, []]
[6, []]
[7, []]
[8, []]
[9, [[3, 3, 3]]]
[10, [[4, 4, 2]]]
[11, [[6, 3, 2]]]
[12, []]
[13, []]
[14, []]
[15, []]
[16, [[4, 4, 4, 4]]]
[17, [[6, 4, 4, 3]]]
[18, [[6, 6, 3, 3]]]
[19, []]
[20, [[6, 6, 6, 2]]]
[21, []]
[22, [[12, 4, 3, 3], [10, 5, 5, 2], [8, 8, 4, 2]]]
[23, []]
[24, [[12, 6, 4, 2]]]
[25, [[5, 5, 5, 5, 5]]]
[26, [[6, 6, 6, 4, 4]]]
[27, [[6, 6, 6, 6, 3]]]
[28, [[10, 5, 5, 4, 4], [8, 8, 4, 4, 4]]]
[29, [[12, 12, 3, 2], [10, 6, 5, 5, 3], [8, 8, 6, 4, 3]]]
[30, [[15, 10, 3, 2], [12, 6, 4, 4, 4]]]
[31, [[20, 5, 4, 2], [12, 6, 6, 4, 3]]]
[32, [[18, 9, 3, 2]]]
[33, [[15, 5, 5, 5, 3], [9, 9, 9, 3, 3]]]
[34, [[12, 8, 8, 3, 3], [8, 8, 8, 8, 2]]]
[35, [[12, 12, 4, 4, 3], [9, 9, 9, 6, 2]]]
[36, [[15, 10, 4, 4, 3], [12, 12, 6, 3, 3], [12, 8, 8, 6, 2], [6, 6, 6, 6, 6, 6]]]
[37, [[24, 8, 3, 2], [20, 5, 4, 4, 4], [15, 10, 6, 3, 3], [14, 7, 7, 7, 2], [10, 10, 10, 5, 2]]]
[38, [[20, 6, 5, 4, 3], [18, 9, 4, 4, 3], [12, 12, 6, 6, 2], [10, 6, 6, 6, 5, 5], [8, 8, 6, 6, 6, 4]]]
[39, [[18, 9, 6, 3, 3], [15, 10, 6, 6, 2]]]
[40, [[12, 6, 6, 6, 6, 4], [10, 10, 5, 5, 5, 5], [10, 8, 8, 5, 5, 4], [8, 8, 8, 8, 4, 4]]]
[41, [[21, 7, 7, 3, 3], [18, 9, 6, 6, 2], [15, 15, 5, 3, 3], [9, 9, 9, 6, 4, 4], [8, 8, 8, 8, 6, 3]]]
[42, [[15, 6, 6, 5, 5, 5], [12, 12, 12, 4, 2], [12, 10, 6, 5, 5, 4], [12, 8, 8, 6, 4, 4], [9, 9, 9, 6, 6, 3]]]
[43, [[24, 8, 4, 4, 3], [21, 7, 7, 6, 2], [20, 12, 5, 3, 3], [20, 8, 8, 5, 2], [15, 15, 6, 5, 2], [15, 12, 10, 4, 2], [14, 7, 7, 7, 4, 4], [12, 8, 8, 6, 6, 3], [10, 10, 10, 5, 4, 4]]]
[44, [[24, 8, 6, 3, 3], [14, 7, 7, 7, 6, 3], [12, 12, 6, 6, 4, 4], [10, 10, 10, 6, 5, 3]]]
[45, [[20, 12, 6, 5, 2], [18, 12, 9, 4, 2], [15, 10, 6, 6, 4, 4], [12, 12, 6, 6, 6, 3]]]
[46, [[24, 8, 6, 6, 2], [20, 10, 10, 4, 2], [16, 16, 8, 4, 2], [15, 12, 5, 5, 5, 4], [15, 10, 6, 6, 6, 3], [12, 9, 9, 9, 4, 3]]]
[47, [[20, 6, 6, 6, 5, 4], [18, 9, 6, 6, 4, 4], [12, 12, 10, 5, 5, 3], [12, 12, 8, 8, 4, 3]]]
[48, [[18, 9, 6, 6, 6, 3], [15, 10, 10, 5, 5, 3], [15, 10, 8, 8, 4, 3], [12, 12, 12, 4, 4, 4]]]
[49, [[21, 7, 7, 6, 4, 4], [20, 10, 5, 5, 5, 4], [20, 8, 8, 5, 4, 4], [15, 15, 6, 5, 4, 4], [15, 12, 10, 4, 4, 4], [12, 12, 12, 6, 4, 3], [7, 7, 7, 7, 7, 7, 7]]]
[50, [[24, 12, 8, 4, 2], [21, 7, 7, 6, 6, 3], [20, 8, 8, 6, 5, 3], [18, 10, 9, 5, 5, 3], [18, 9, 8, 8, 4, 3], [15, 15, 6, 6, 5, 3], [15, 12, 10, 6, 4, 3], [8, 8, 8, 8, 6, 6, 6]]]
[51, [[30, 10, 5, 3, 3], [20, 12, 6, 5, 4, 4], [18, 12, 9, 4, 4, 4], [9, 9, 9, 6, 6, 6, 6]]]
[52, [[24, 8, 6, 6, 4, 4], [20, 20, 5, 5, 2], [20, 12, 6, 6, 5, 3], [20, 10, 10, 4, 4, 4], [18, 12, 9, 6, 4, 3], [16, 16, 8, 4, 4, 4], [12, 8, 8, 6, 6, 6, 6], [10, 10, 10, 10, 10, 2], [10, 8, 8, 8, 8, 5, 5], [8, 8, 8, 8, 8, 8, 4]]]
[53, [[30, 10, 6, 5, 2], [24, 8, 6, 6, 6, 3], [20, 10, 10, 6, 4, 3], [16, 16, 8, 6, 4, 3], [14, 7, 7, 7, 6, 6, 6], [12, 12, 9, 9, 9, 2], [10, 10, 10, 6, 6, 6, 5], [10, 9, 9, 9, 6, 5, 5], [9, 9, 9, 8, 8, 6, 4]]]
[54, [[42, 7, 3, 2], [21, 12, 7, 7, 4, 3], [15, 15, 12, 5, 4, 3], [15, 10, 9, 9, 9, 2], [12, 12, 12, 12, 3, 3], [12, 12, 12, 8, 8, 2], [12, 12, 6, 6, 6, 6, 6], [12, 10, 8, 8, 6, 5, 5], [12, 8, 8, 8, 8, 6, 4]]]
[55, [[28, 14, 7, 4, 2], [24, 10, 8, 5, 5, 3], [24, 8, 8, 8, 4, 3], [15, 12, 12, 10, 3, 3], [15, 12, 10, 8, 8, 2], [15, 10, 6, 6, 6, 6, 6], [14, 10, 7, 7, 7, 5, 5], [14, 8, 8, 7, 7, 7, 4], [12, 9, 9, 9, 6, 6, 4], [10, 10, 10, 10, 5, 5, 5], [10, 10, 10, 8, 8, 5, 4]]]
[56, [[30, 6, 5, 5, 5, 5], [24, 12, 8, 4, 4, 4], [20, 12, 12, 5, 4, 3], [18, 9, 9, 9, 9, 2], [15, 15, 10, 10, 3, 3], [12, 12, 12, 12, 6, 2], [12, 12, 10, 6, 6, 5, 5], [12, 12, 8, 8, 6, 6, 4]]]
[57, [[30, 15, 5, 5, 2], [24, 12, 8, 6, 4, 3], [20, 15, 10, 5, 4, 3], [18, 12, 12, 9, 3, 3], [18, 12, 9, 8, 8, 2], [18, 9, 6, 6, 6, 6, 6], [15, 12, 12, 10, 6, 2], [15, 10, 10, 6, 6, 5, 5], [15, 10, 8, 8, 6, 6, 4], [15, 9, 9, 9, 5, 5, 5], [14, 12, 7, 7, 7, 6, 4], [12, 10, 10, 10, 6, 5, 4], [9, 9, 9, 9, 9, 9, 3]]]
[58, [[24, 24, 4, 3, 3], [20, 20, 5, 5, 4, 4], [20, 12, 10, 10, 3, 3], [20, 10, 10, 8, 8, 2], [18, 15, 10, 9, 3, 3], [16, 16, 12, 8, 3, 3], [16, 16, 8, 8, 8, 2], [15, 15, 10, 10, 6, 2], [15, 12, 8, 8, 5, 5, 5], [14, 14, 14, 7, 7, 2], [12, 12, 12, 6, 6, 6, 4], [12, 9, 9, 9, 8, 8, 3], [10, 10, 10, 10, 10, 4, 4]]]
[59, [[30, 10, 6, 5, 4, 4], [28, 21, 4, 3, 3], [21, 7, 7, 6, 6, 6, 6], [20, 20, 6, 5, 5, 3], [20, 18, 9, 5, 4, 3], [20, 8, 8, 6, 6, 6, 5], [18, 18, 18, 3, 2], [18, 12, 12, 9, 6, 2], [18, 10, 9, 6, 6, 5, 5], [18, 9, 8, 8, 6, 6, 4], [15, 15, 6, 6, 6, 6, 5], [15, 12, 10, 6, 6, 6, 4], [12, 12, 9, 9, 9, 4, 4], [12, 12, 8, 8, 8, 8, 3], [10, 10, 10, 10, 10, 6, 3]]]
[60, [[42, 7, 4, 4, 3], [36, 9, 9, 4, 2], [30, 20, 4, 3, 3], [30, 10, 6, 6, 5, 3], [24, 24, 6, 4, 2], [20, 20, 15, 3, 2], [20, 12, 10, 10, 6, 2], [18, 18, 9, 9, 3, 3], [18, 15, 10, 9, 6, 2], [16, 16, 12, 8, 6, 2], [15, 12, 12, 6, 5, 5, 5], [15, 10, 9, 9, 9, 4, 4], [15, 10, 8, 8, 8, 8, 3], [12, 12, 12, 10, 5, 5, 4], [12, 12, 12, 8, 8, 4, 4], [12, 12, 9, 9, 9, 6, 3]]]
[61, [[42, 7, 6, 3, 3], [35, 14, 5, 5, 2], [28, 21, 6, 4, 2], [28, 14, 7, 4, 4, 4], [24, 16, 16, 3, 2], [24, 9, 9, 9, 8, 2], [21, 21, 14, 3, 2], [21, 12, 12, 7, 7, 2], [21, 10, 7, 7, 6, 5, 5], [21, 8, 8, 7, 7, 6, 4], [20, 12, 6, 6, 6, 6, 5], [20, 10, 8, 8, 5, 5, 5], [20, 8, 8, 8, 8, 5, 4], [18, 12, 9, 6, 6, 6, 4], [15, 15, 12, 12, 5, 2], [15, 15, 10, 6, 5, 5, 5], [15, 15, 8, 8, 6, 5, 4], [15, 12, 10, 10, 5, 5, 4], [15, 12, 10, 8, 8, 4, 4], [15, 10, 9, 9, 9, 6, 3], [12, 12, 12, 8, 8, 6, 3]]]
[62, [[30, 20, 6, 4, 2], [28, 14, 7, 6, 4, 3], [24, 12, 12, 8, 3, 3], [24, 12, 8, 8, 8, 2], [24, 8, 6, 6, 6, 6, 6], [21, 15, 10, 7, 7, 2], [21, 14, 14, 7, 3, 3], [20, 10, 10, 6, 6, 6, 4], [20, 9, 9, 9, 6, 5, 4], [18, 18, 9, 9, 6, 2], [18, 9, 9, 9, 9, 4, 4], [18, 9, 8, 8, 8, 8, 3], [16, 16, 8, 6, 6, 6, 4], [15, 15, 15, 10, 5, 2], [15, 12, 10, 8, 8, 6, 3], [14, 12, 12, 7, 7, 7, 3], [12, 12, 12, 12, 6, 4, 4], [12, 12, 10, 10, 10, 5, 3]]]
[63, [[42, 7, 6, 6, 2], [30, 15, 5, 5, 4, 4], [24, 15, 10, 8, 3, 3], [21, 12, 7, 7, 6, 6, 4], [20, 12, 12, 12, 5, 2], [20, 12, 10, 6, 5, 5, 5], [20, 12, 8, 8, 6, 5, 4], [18, 15, 9, 6, 5, 5, 5], [18, 12, 10, 9, 5, 5, 4], [18, 12, 9, 8, 8, 4, 4], [18, 9, 9, 9, 9, 6, 3], [15, 15, 12, 6, 6, 5, 4], [15, 14, 10, 7, 7, 7, 3], [15, 12, 12, 10, 6, 4, 4], [15, 10, 10, 10, 10, 5, 3], [12, 12, 12, 12, 6, 6, 3]]]
[64, [[40, 10, 8, 4, 2], [36, 18, 4, 3, 3], [30, 15, 6, 5, 5, 3], [30, 12, 10, 5, 4, 3], [24, 20, 8, 5, 4, 3], [24, 12, 12, 8, 6, 2], [24, 10, 8, 6, 6, 5, 5], [24, 8, 8, 8, 6, 6, 4], [21, 18, 9, 7, 7, 2], [21, 14, 14, 7, 6, 2], [20, 15, 12, 10, 5, 2], [20, 14, 7, 7, 7, 5, 4], [20, 10, 10, 10, 5, 5, 4], [20, 10, 10, 8, 8, 4, 4], [18, 15, 15, 9, 5, 2], [18, 12, 9, 8, 8, 6, 3], [16, 16, 10, 8, 5, 5, 4], [16, 16, 8, 8, 8, 4, 4], [15, 15, 10, 10, 6, 4, 4], [15, 12, 12, 10, 6, 6, 3], [14, 14, 14, 7, 7, 4, 4], [8, 8, 8, 8, 8, 8, 8, 8]]]
[65, [[45, 9, 5, 3, 3], [30, 15, 15, 3, 2], [24, 24, 12, 3, 2], [24, 18, 9, 8, 3, 3], [24, 15, 10, 8, 6, 2], [21, 15, 7, 7, 5, 5, 5], [21, 9, 9, 9, 7, 7, 3], [20, 12, 12, 6, 6, 5, 4], [20, 10, 10, 8, 8, 6, 3], [18, 18, 18, 4, 4, 3], [18, 14, 9, 7, 7, 7, 3], [18, 12, 12, 9, 6, 4, 4], [18, 10, 10, 10, 9, 5, 3], [16, 16, 8, 8, 8, 6, 3], [15, 15, 15, 5, 5, 5, 5], [15, 15, 10, 10, 6, 6, 3], [15, 15, 9, 9, 9, 5, 3], [14, 14, 14, 7, 7, 6, 3], [9, 9, 9, 8, 8, 8, 8, 6]]]
[66, [[36, 18, 6, 4, 2], [36, 9, 9, 4, 4, 4], [30, 10, 10, 10, 3, 3], [28, 21, 12, 3, 2], [24, 24, 6, 4, 4, 4], [24, 12, 8, 6, 6, 6, 4], [21, 12, 8, 8, 7, 7, 3], [20, 20, 15, 4, 4, 3], [20, 18, 12, 9, 5, 2], [20, 15, 10, 6, 6, 5, 4], [20, 12, 10, 10, 6, 4, 4], [18, 18, 18, 6, 3, 3], [18, 15, 10, 9, 6, 4, 4], [18, 12, 12, 9, 6, 6, 3], [16, 16, 12, 8, 6, 4, 4], [15, 15, 12, 8, 8, 5, 3], [12, 8, 8, 8, 8, 8, 8, 6], [9, 9, 9, 9, 9, 9, 6, 6]]]
[67, [[45, 9, 6, 5, 2], [42, 12, 7, 4, 2], [40, 8, 5, 5, 5, 4], [36, 9, 9, 6, 4, 3], [35, 14, 5, 5, 4, 4], [30, 20, 12, 3, 2], [28, 21, 6, 4, 4, 4], [28, 14, 12, 7, 3, 3], [28, 14, 8, 8, 7, 2], [28, 7, 7, 7, 7, 7, 4], [24, 24, 6, 6, 4, 3], [24, 18, 9, 8, 6, 2], [24, 16, 16, 4, 4, 3], [24, 9, 9, 9, 8, 4, 4], [24, 8, 8, 8, 8, 8, 3], [21, 21, 14, 4, 4, 3], [21, 12, 12, 7, 7, 4, 4], [20, 20, 15, 6, 3, 3], [20, 20, 10, 10, 5, 2], [20, 16, 16, 8, 5, 2], [20, 15, 12, 5, 5, 5, 5], [20, 12, 10, 10, 6, 6, 3], [20, 12, 9, 9, 9, 5, 3], [18, 15, 10, 9, 6, 6, 3], [16, 16, 12, 8, 6, 6, 3], [15, 15, 12, 12, 5, 4, 4], [14, 8, 8, 8, 8, 7, 7, 7], [12, 12, 12, 12, 12, 4, 3], [12, 9, 9, 9, 8, 8, 6, 6], [10, 10, 10, 8, 8, 8, 8, 5]]]
[68, [[35, 14, 6, 5, 5, 3], [30, 20, 6, 4, 4, 4], [30, 10, 10, 10, 6, 2], [28, 21, 6, 6, 4, 3], [24, 16, 16, 6, 3, 3], [24, 15, 8, 6, 5, 5, 5], [24, 12, 10, 8, 5, 5, 4], [24, 12, 8, 8, 8, 4, 4], [24, 9, 9, 9, 8, 6, 3], [21, 21, 14, 6, 3, 3], [21, 15, 10, 7, 7, 4, 4], [21, 12, 12, 7, 7, 6, 3], [20, 20, 6, 6, 6, 5, 5], [20, 18, 9, 6, 6, 5, 4], [20, 12, 12, 8, 8, 5, 3], [18, 18, 18, 6, 6, 2], [18, 18, 9, 9, 6, 4, 4], [15, 15, 15, 10, 5, 4, 4], [15, 15, 12, 12, 6, 5, 3], [15, 12, 12, 12, 10, 4, 3], [14, 9, 9, 9, 7, 7, 7, 6], [12, 12, 8, 8, 8, 8, 6, 6], [10, 10, 10, 10, 10, 6, 6, 6], [10, 10, 10, 9, 9, 9, 6, 5]]]
[69, [[42, 7, 6, 6, 4, 4], [35, 15, 14, 3, 2], [30, 20, 6, 6, 4, 3], [30, 10, 6, 6, 6, 6, 5], [28, 14, 12, 7, 6, 2], [24, 21, 8, 7, 7, 2], [24, 15, 15, 8, 5, 2], [24, 12, 8, 8, 8, 6, 3], [21, 15, 10, 7, 7, 6, 3], [20, 20, 15, 6, 6, 2], [20, 15, 10, 8, 8, 5, 3], [20, 12, 12, 12, 5, 4, 4], [18, 18, 9, 9, 6, 6, 3], [15, 15, 15, 10, 6, 5, 3], [15, 15, 12, 10, 10, 4, 3], [15, 10, 8, 8, 8, 8, 6, 6], [14, 12, 8, 8, 7, 7, 7, 6], [12, 12, 9, 9, 9, 6, 6, 6], [12, 10, 10, 10, 8, 8, 6, 5]]]
[70, [[42, 7, 6, 6, 6, 3], [40, 10, 8, 4, 4, 4], [24, 24, 8, 8, 3, 3], [24, 16, 16, 6, 6, 2], [24, 14, 8, 7, 7, 7, 3], [24, 12, 12, 8, 6, 4, 4], [24, 10, 10, 10, 8, 5, 3], [21, 21, 14, 6, 6, 2], [21, 20, 7, 7, 6, 5, 4], [21, 18, 9, 7, 7, 4, 4], [21, 14, 14, 7, 6, 4, 4], [20, 20, 10, 5, 5, 5, 5], [20, 20, 8, 8, 5, 5, 4], [20, 15, 15, 6, 5, 5, 4], [20, 15, 12, 10, 5, 4, 4], [20, 12, 12, 12, 6, 5, 3], [18, 15, 15, 9, 5, 4, 4], [18, 12, 12, 12, 9, 4, 3], [16, 16, 16, 16, 4, 2], [15, 10, 9, 9, 9, 6, 6, 6], [14, 14, 7, 7, 7, 7, 7, 7], [14, 10, 10, 10, 7, 7, 7, 5], [12, 12, 12, 8, 8, 6, 6, 6], [12, 9, 9, 9, 9, 9, 9, 4], [10, 10, 10, 10, 10, 10, 5, 5], [10, 10, 10, 10, 10, 8, 8, 4]]]
[71, [[40, 10, 8, 6, 4, 3], [36, 18, 12, 3, 2], [33, 22, 11, 3, 2], [30, 15, 15, 4, 4, 3], [30, 12, 12, 10, 5, 2], [30, 10, 10, 6, 5, 5, 5], [30, 10, 8, 8, 6, 5, 4], [28, 21, 8, 8, 3, 3], [28, 14, 7, 6, 6, 6, 4], [24, 24, 12, 4, 4, 3], [24, 20, 12, 8, 5, 2], [24, 15, 10, 8, 6, 4, 4], [24, 12, 12, 8, 6, 6, 3], [21, 18, 9, 7, 7, 6, 3], [21, 14, 14, 7, 6, 6, 3], [20, 18, 9, 8, 8, 5, 3], [20, 15, 15, 15, 4, 2], [20, 15, 12, 10, 6, 5, 3], [20, 12, 12, 10, 10, 4, 3], [18, 15, 15, 9, 6, 5, 3], [18, 15, 12, 10, 9, 4, 3], [18, 9, 8, 8, 8, 8, 6, 6], [16, 16, 12, 12, 8, 4, 3], [15, 12, 10, 8, 8, 6, 6, 6], [14, 12, 12, 7, 7, 7, 6, 6], [12, 12, 10, 10, 10, 6, 6, 5], [12, 12, 10, 9, 9, 9, 5, 5], [12, 12, 9, 9, 9, 8, 8, 4]]]
[72, [[42, 10, 7, 5, 5, 3], [42, 8, 8, 7, 4, 3], [36, 18, 6, 4, 4, 4], [36, 12, 9, 9, 3, 3], [36, 9, 9, 8, 8, 2], [30, 20, 8, 8, 3, 3], [30, 15, 15, 6, 3, 3], [30, 15, 10, 10, 5, 2], [28, 21, 12, 4, 4, 3], [24, 24, 12, 6, 3, 3], [24, 24, 8, 8, 6, 2], [24, 15, 10, 8, 6, 6, 3], [20, 20, 12, 6, 5, 5, 4], [20, 18, 12, 9, 5, 4, 4], [20, 15, 10, 10, 10, 4, 3], [18, 18, 18, 12, 4, 2], [18, 9, 9, 9, 9, 6, 6, 6], [16, 16, 15, 10, 8, 4, 3], [15, 14, 10, 7, 7, 7, 6, 6], [15, 10, 10, 10, 10, 6, 6, 5], [15, 10, 10, 9, 9, 9, 5, 5], [15, 10, 9, 9, 9, 8, 8, 4], [12, 12, 12, 12, 6, 6, 6, 6], [12, 12, 12, 10, 8, 8, 5, 5], [12, 12, 12, 8, 8, 8, 8, 4], [12, 10, 10, 10, 10, 10, 6, 4]]]
[73, [[45, 9, 6, 5, 4, 4], [42, 12, 7, 4, 4, 4], [36, 18, 6, 6, 4, 3], [35, 7, 7, 7, 7, 5, 5], [30, 20, 12, 4, 4, 3], [30, 15, 6, 6, 6, 5, 5], [30, 12, 10, 6, 6, 5, 4], [28, 21, 12, 6, 3, 3], [28, 21, 8, 8, 6, 2], [28, 14, 10, 7, 5, 5, 4], [28, 14, 8, 8, 7, 4, 4], [24, 20, 8, 6, 6, 5, 4], [24, 18, 9, 8, 6, 4, 4], [21, 21, 7, 7, 7, 7, 3], [21, 15, 15, 7, 7, 5, 3], [21, 8, 8, 8, 8, 7, 7, 6], [20, 20, 15, 12, 4, 2], [20, 20, 10, 10, 5, 4, 4], [20, 18, 12, 9, 6, 5, 3], [20, 16, 16, 8, 5, 4, 4], [20, 8, 8, 8, 8, 8, 8, 5], [18, 18, 12, 9, 9, 4, 3], [18, 12, 9, 8, 8, 6, 6, 6], [15, 15, 15, 15, 5, 5, 3], [15, 15, 8, 8, 8, 8, 6, 5], [15, 12, 12, 10, 6, 6, 6, 6], [15, 12, 10, 10, 8, 8, 5, 5], [15, 12, 10, 8, 8, 8, 8, 4], [12, 12, 12, 9, 9, 9, 6, 4]]]
[74, [[48, 16, 4, 3, 3], [45, 9, 6, 6, 5, 3], [42, 12, 7, 6, 4, 3], [36, 12, 9, 9, 6, 2], [30, 20, 12, 6, 3, 3], [30, 20, 8, 8, 6, 2], [30, 18, 10, 9, 5, 2], [30, 15, 15, 6, 6, 2], [30, 12, 12, 5, 5, 5, 5], [30, 10, 10, 10, 6, 4, 4], [28, 14, 8, 8, 7, 6, 3], [24, 24, 12, 6, 6, 2], [24, 18, 9, 8, 6, 6, 3], [24, 16, 16, 12, 4, 2], [21, 21, 14, 12, 4, 2], [21, 9, 9, 9, 7, 7, 6, 6], [20, 20, 10, 10, 6, 5, 3], [20, 18, 10, 10, 9, 4, 3], [20, 16, 16, 8, 6, 5, 3], [20, 10, 10, 8, 8, 6, 6, 6], [20, 9, 9, 9, 8, 8, 6, 5], [18, 18, 18, 6, 6, 4, 4], [18, 16, 16, 9, 8, 4, 3], [18, 14, 9, 7, 7, 7, 6, 6], [18, 10, 10, 10, 9, 6, 6, 5], [18, 10, 9, 9, 9, 9, 5, 5], [18, 9, 9, 9, 9, 8, 8, 4], [16, 16, 8, 8, 8, 6, 6, 6], [15, 15, 10, 10, 6, 6, 6, 6], [15, 15, 9, 9, 9, 6, 6, 5], [15, 12, 10, 9, 9, 9, 6, 4], [14, 14, 14, 7, 7, 6, 6, 6], [12, 12, 12, 12, 12, 12, 2], [12, 12, 12, 12, 10, 6, 5, 5], [12, 12, 12, 12, 8, 8, 6, 4]]]
[75, [[42, 14, 14, 3, 2], [40, 15, 8, 5, 4, 3], [35, 15, 14, 4, 4, 3], [30, 30, 10, 3, 2], [30, 15, 10, 5, 5, 5, 5], [30, 15, 8, 8, 5, 5, 4], [30, 10, 10, 10, 6, 6, 3], [30, 10, 9, 9, 9, 5, 3], [28, 21, 12, 6, 6, 2], [28, 14, 12, 7, 6, 4, 4], [24, 21, 8, 7, 7, 4, 4], [24, 15, 15, 8, 5, 4, 4], [24, 12, 12, 12, 8, 4, 3], [21, 20, 12, 7, 7, 5, 3], [21, 14, 14, 12, 7, 4, 3], [21, 12, 8, 8, 7, 7, 6, 6], [20, 20, 15, 6, 6, 4, 4], [20, 15, 15, 12, 5, 5, 3], [20, 12, 8, 8, 8, 8, 6, 5], [18, 18, 18, 6, 6, 6, 3], [18, 12, 12, 9, 6, 6, 6, 6], [18, 12, 10, 9, 8, 8, 5, 5], [18, 12, 9, 8, 8, 8, 8, 4], [15, 15, 12, 8, 8, 6, 6, 5], [15, 12, 12, 12, 12, 10, 2], [15, 12, 12, 10, 10, 6, 5, 5], [15, 12, 12, 10, 8, 8, 6, 4], [14, 12, 12, 12, 7, 7, 7, 4], [12, 12, 12, 10, 10, 10, 5, 4]]]
[76, [[48, 16, 6, 4, 2], [40, 12, 10, 8, 3, 3], [40, 10, 8, 8, 8, 2], [36, 18, 8, 8, 3, 3], [36, 9, 9, 6, 6, 6, 4], [35, 15, 14, 6, 3, 3], [35, 14, 10, 10, 5, 2], [30, 20, 12, 6, 6, 2], [30, 12, 10, 8, 8, 5, 3], [28, 20, 14, 7, 5, 2], [28, 14, 14, 14, 4, 2], [28, 14, 12, 7, 6, 6, 3], [24, 24, 6, 6, 6, 6, 4], [24, 21, 8, 7, 7, 6, 3], [24, 20, 8, 8, 8, 5, 3], [24, 16, 16, 6, 6, 4, 4], [24, 15, 15, 8, 6, 5, 3], [24, 15, 12, 10, 8, 4, 3], [24, 8, 8, 8, 8, 8, 6, 6], [21, 21, 14, 6, 6, 4, 4], [21, 14, 7, 7, 7, 7, 7, 6], [21, 10, 10, 10, 7, 7, 6, 5], [20, 20, 20, 10, 4, 2], [20, 20, 15, 6, 6, 6, 3], [20, 14, 8, 8, 7, 7, 7, 5], [20, 12, 10, 10, 6, 6, 6, 6], [20, 12, 9, 9, 9, 6, 6, 5], [20, 10, 10, 10, 8, 8, 5, 5], [20, 10, 10, 8, 8, 8, 8, 4], [18, 15, 10, 9, 6, 6, 6, 6], [18, 12, 9, 9, 9, 9, 6, 4], [16, 16, 16, 16, 4, 4, 4], [16, 16, 12, 8, 6, 6, 6, 6], [16, 16, 10, 8, 8, 8, 5, 5], [16, 16, 8, 8, 8, 8, 8, 4], [15, 15, 14, 7, 7, 7, 6, 5], [15, 15, 12, 12, 10, 10, 2], [15, 15, 10, 10, 10, 6, 5, 5], [15, 15, 10, 10, 8, 8, 6, 4], [15, 14, 12, 10, 7, 7, 7, 4], [15, 12, 10, 10, 10, 10, 5, 4], [14, 14, 14, 10, 7, 7, 5, 5], [14, 14, 14, 8, 8, 7, 7, 4], [12, 12, 12, 12, 12, 6, 6, 4]]]
[77, [[60, 5, 5, 4, 3], [36, 18, 12, 4, 4, 3], [35, 14, 6, 6, 6, 5, 5], [33, 22, 11, 4, 4, 3], [30, 18, 9, 5, 5, 5, 5], [30, 15, 12, 6, 5, 5, 4], [30, 12, 12, 10, 5, 4, 4], [28, 21, 6, 6, 6, 6, 4], [24, 20, 12, 8, 5, 4, 4], [24, 16, 16, 6, 6, 6, 3], [24, 9, 9, 9, 8, 6, 6, 6], [21, 21, 14, 6, 6, 6, 3], [21, 12, 12, 7, 7, 6, 6, 6], [20, 20, 12, 12, 5, 5, 3], [20, 15, 15, 15, 4, 4, 4], [20, 12, 12, 8, 8, 6, 6, 5], [20, 10, 10, 9, 9, 9, 6, 4], [18, 18, 18, 10, 5, 5, 3], [18, 18, 18, 8, 8, 4, 3], [18, 12, 12, 12, 12, 9, 2], [18, 12, 12, 10, 9, 6, 5, 5], [18, 12, 12, 9, 8, 8, 6, 4], [16, 16, 16, 16, 6, 4, 3], [16, 16, 9, 9, 9, 8, 6, 4], [15, 15, 15, 10, 10, 10, 2], [15, 15, 12, 12, 6, 6, 6, 5], [15, 12, 12, 12, 10, 6, 6, 4], [12, 12, 10, 10, 10, 10, 10, 3]]]

2015年12月6日日曜日

151206

Ruby


フィボナッチ数列、トリボナッチ数列、テトラナッチ数列、…(1)

行列計算で第10 ** i 項を求めてみた。

require 'matrix'

def f(m, n)
  ary0 = Array.new(m, 0)
  ary0[0] = 1
  v = Vector.elements(ary0)
  ary1 = [Array.new(m, 1)]
  (0..m - 2).each{|i|
    ary2 = Array.new(m, 0)
    ary2[i] = 1
    ary1 << ary2
  }
  # 配列を引数に展開
  a = Matrix[*ary1]
  ((a ** n) * v)[m - 1]
end

(2..9).each{|m|
  p [m, (0..3).map{|i| f(m, 10 ** i)}]
}

出力結果
[2, [1, 55, 354224848179261915075, 43466557686937456435688527675040625802564660517371780402481729089536555417949051890403879840079255169295922593080322634775209689623239873322471161642996440906533187938298969649928516003704476137795166849228875]]
[3, [0, 81, 53324762928098149064722658, 815507705949063215012634973737520390101047421640059634182536354954214345249517992411833219017896606412691713984091121798255747368520490502996057925004321483423983646944214344896256767238653269823324951340326550513652712428004750634815007544492510783789625725711384]]
[4, [0, 56, 2505471397838180985096739296, 80612965543569013375053017657224193322814498804143605698949253030259897351461707903235835255206857522960377247566119902833745107612558849667330639399422732632784532453583865206618002987209702170391793700471749898929136523409356835657014641447629317324840860079447184465668382508012160]]
[5, [0, 31, 8196759338261258264777004033, 13443520142394747905751303566960790514566367463663197111501191353709777126951474437866553367699441909504861540463704750840265037040870875839355638074955810739914342739218524786521352712187959472233969938248839473553665729166138340108183543336370069925904006912191465031558094147780942189200385]]
[6, [0, 16, 9446344817130007349662323904, 47926174280534914669640266755148680489952118066975763667882257581628650841761200610945408653182800916211576373936961298845651034956198409928069155819952368459415153711417382010472835852503043165772701691203304186831738194153591261201264679349298483657706552908018904841271338093240673228858160925]]
[7, [0, 8, 6952140676324494942045981696, 1568533933639196723025504816474892852801846600864935684677652330390629628312734658710324141182365413218878322926744076865229701569192566760399957949871518592634865083152698359621666274103976779813320200452549583186618098440409094525862076074444095357580578448762728970589935447300195920253480368658]]
[8, [0, 4, 4174747959172997404458625000, 5904990663319680096123713875387637834772027171150191509938030832603868343114917525591710433451943909189072757672390035289070630326679467682705473605908772863221587632898955331292176455715311981565666613292343161561310821563812781090847026437544565470534358494130640715780288951601230887635364049824]]
[9, [0, 2, 2279225977799461090403757880, 7933924390689031620818248254865930320588478067806264015020660356321568507968010461016354223553238235750493991343409309027268583945543255310735045919810484597016385159889096988465566253717414096007757163324472200386665933665338994209466205599325727554774532611195062752846504637865571732106893914592]]

2015年12月2日水曜日

151202

Ruby


Number of smooth weakly unimodal compositions of n into positive parts such that the first and last part are 1(2)

速くしてみた。

# nをl以上の相異なるk個の数で分割
def g(n, l, k)
  return 0 if n < l
  return 1 if k == 1
  s = 0
  (l + 1..n).each{|i|
    v = g(n - i + 1, i, k - 1)
    break if v == 0
    s += v
  }
  return s
end

# nをk個の相異なる数に分割
def g0(n, k)
  g(n, 1, k)
end

def f(n)
  # 1, 1, … , 1の真っ平らなもの
  s = 1
  # 山型
  (1..n).each{|i|
    (1..i).each{|k|
      # 和がiでkのぼるものと和がn - iでk + 1のぼるものを組み合わせたもの
      s += g0(i, k) * g0(n - i, k + 1) 
    }
  }
  s
end

def A001522(n)
  (0..n).map{|i| f(i)}
end
ary = A001522(56)

# OEIS A001522のデータ
ary0 =
[1,1,1,1,2,3,5,7,10,14,19,26,35,47,62,82,107,139,
 179,230,293,372,470,591,740,924,1148,1422,1756,
 2161,2651,3244,3957,4815,5844,7075,8545,10299,
 12383,14859,17794,21267,25368,30207,35902,42600,
 50462,59678,70465,83079,97800,114967,134956,
 158205,185209,216546,252859]
# 一致の確認
p ary == ary0