JavaScript | 【報告も】単発質問@JavaScript part3 | 229 回答例
おれはあたまわるいので、http://haxe.no-ip.org/ro/comb.html をどうぞ。
消された。
筆算的
近似です。JavaScript の有効精度の範囲しかでません。
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"> <meta http-equiv="Content-Type" content="text/html; charset=shift_jis"> <title>二項係数</title> <script type="text/javascript">// <![CDATA[ function factorize(n) { if (n === 1) return [n]; if (n <= 0 || n !== Math.floor(n)) return false; for (var i, m, l = 2, a = [];;) { i = l; m = Math.sqrt(n + 0.5); while (i <= m) { if (n % i === 0) { a.push(i); break; } i++; } if (i > m) { a.push(n); return a; } l = i; n /= i; } } function comb(n, r) { n = new Number(n); r = new Number(r); if (n < r) return 0; if (n === r) return 1; if (r === 1) return n; for (var a = [], b = [], i = 0; i < r; i++) { a.push.apply(a, factorize(n - i)); b.push.apply(b, factorize(r - i)); } for (var c = 1, i = 0, a_len = a.length; i < a_len; i++) { for (var j = 0, b_len = b.length; j < b_len; j++) if (a[i] === b[j]) { a.splice(i, 1, 1); b.splice(j, 1); break; } if (a[i] !== 1) { c *= a[i]; if (c === Number.POSITIVE_INFINITY) break; } } return c; } var s = '整数を入力してください。'; var n = prompt(s, 100); var r = prompt(s, 6); var c = comb(n, r); document.write(['<a href="http://www.google.co.jp/search?q=', n, '+choose+', r, '=" target="_blank">'].join('')); document.write(['<sub>', n, '</sub>C<sub>', r, '</sub> = ', c].join('')); document.write('</a>'); // ]]></script>
BigInt.js
http://soudan1.biglobe.ne.jp/qa3543321.html の回答番号:No.7 とは一致するから、まあよさそうでしょうか……
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"> <meta http-equiv="Content-Type" content="text/html; charset=shift_jis"> <title>二項係数</title> <script type="text/javascript" charset="shift_jis" src="BigInt.js"></script> <script type="text/javascript">// <![CDATA[ var s = '整数を入力してください。'; var n = prompt(s, 100); var r = prompt(s, 6); var n_ = new BigInt(n); var r_ = new BigInt(r); var d = new BigInt('1'); for (var i = new BigInt('1'), l = r_.clone(); bigint_cmp(l, i) === 1; i = bigint_plus(i, d)) { n_ = bigint_mul(n_, bigint_minus(n, i)); r_ = bigint_mul(r_, bigint_minus(r, i)); } var c = bigint_div(n_, r_); document.write(['<a href="http://www.google.co.jp/search?q=', n, '+choose+', r, '=" target="_blank">'].join('')); document.write(['<sub>', n, '</sub>C<sub>', r, '</sub> = ', c].join('')); document.write('</a>'); // ]]></script>
n: 10000, r: 3000
77578708414622781919184089365853843098672731962523453409968751787633293257691437779648342779636837348257661278020246468978424504486063764431993264812099886855642805366567468224545687001100289521502310947898048189264907149430829075087126757760970600128136307191477472836543587696792303287128651789677102700955487241433699252190405947235989597133154589524966041573707030924085670532503399822727233329549509080309938930678718634679989765925137304694732383276086233489774647579212642885578743907836354019701783883048023872206622806636352045276069616724975579837711775366289529689029117789401577125561421086852340165718843028182271868548389210265623855037171047970471916148908394143078836565457811483937138688658428843309307648201538869279089975997921408491177067667611792575679011657080668803280848189309515578008732412419137279234811308177803979352145203295182155827794313691092976729791730985798111860221490211533734012384256104068797257299270636324189556939474629411781084725425913515068172351801315118208125402060325840725900500604082184865351060840421109952628835568877752553530241881249376104101545415870730219285988925821947903601556995170153620169529150078283356127291891288910266808547589720394105911344257379277304549575049354285576843730220694295275435485251033346293408317927913371677359912095741342849009790373887254153530026440866752537063007569586890149115531439818588979444670166834027103334802508618943389787854659991093524667093991139230457632005685109254296862862826621766815964756364190444633813355612593367357401369122209408515076055502350536009606559041119797261708529457659062317317152317944204773452754975187892029931879905967833346677414514111252909397747428826679839888112128175195018049063902123230517964865415017075715173083126695073092129268520591369982547135322037208785944746424426000688505303970635613067339979939953172057819207596842814523372590377578302876910631453275829919852561667815626690325720395145676223982087510693989808055283808938171380053608991466724348163261760422311385729973653146174170295046868447793594776171595029693596313173076609940410894195550973272473540621600521540201374449682094174763326534265020448669547304892857748211091972028737309834508503333952623674119987540629556228390883273717156114799538356170542580669860506374367432932863453630596067494731613579604848504562787021006475265029729171072949615077945922191058312506985468796476484190083717582220249017921906106011522284298198930211499275805765495010980922961271399465492855261725792866382239669622113185827382786669680964488190533819017404919095222763574499667853184977595133044511925342976298783924294544799815303065588659246595943283200