開発環境
- macOS Sierra - Apple (OS)
- Emacs (Text Editor)
- JavaScript (プログラミング言語)
- 参考書籍
φ(n) って再帰で定義できそう。
— ルファー (@tkooler_lufar) 2017年6月23日
第199回 からみあう素数(前編)|結城浩 @hyuki |数学ガールの秘密ノートhttps://t.co/VtyNY7CZvA
ということで、からみあう素数に出てくる φ(n) (n ∈ ℕ - {0})(オイラーのφ関数、オイラーのトーシェント関数(Euler's totient function))を再帰関数を利用して定義してみた。
コード(Emacs)
HTML5
<pre id="output0"></pre> <label for="n0">n = </label> <input id="n0" min="1" step="1" type="number" value="10"> <button id="run0">run</button> <button id="clear0">clear</button> <script src="sample.js"></script>
JavaScript
let pre0 = document.querySelector('#output0'), btn0 = document.querySelector('#run0'), btn1 = document.querySelector('#clear0'), input_n0 = document.querySelector('#n0'), inputs = [input_n0], p = (x) => pre0.textContent += x + '\n'; // ユークリッド互除法 let gcd = (a, b) => b === 0 ? a : gcd(b, a % b); let isDisjoint = (m, n) => gcd(m, n) === 1; let φ = (n) => { let inner = (i) => i > n ? 0 : (isDisjoint(i, n) ? 1 : 0) + inner(i + 1); return inner(1); }; // メモリー節約版 let φ1 = (n) => { let inner = (i, result) => i > n ? result : inner(i + 1, result + (isDisjoint(i, n) ? 1 : 0)); return inner(1, 0); }; let output = () => { let n = parseInt(input_n0.value, 10); p(`φ(${n}) = ${φ(n)}`); p(`φ1(${n}) = ${φ1(n)}`); }; let clear = () => pre0.textContent = ''; inputs.forEach((input) => input.onchange = output); btn0.onclick = output; btn1.onclick = clear; output();
0 コメント:
コメントを投稿