開発環境
- 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 コメント:
コメントを投稿
Comments on Google+: