2018年4月6日金曜日

学習環境

数学読本〈6〉線形写像・1次変換/数論へのプレリュード/集合論へのプレリュード/εとδ/落ち穂拾い など(松坂 和夫(著)、岩波書店)の第23章(数学の中の女王 - 数論へのプレリュード)、23.2(合同式)、連立合同式、問12.を取り組んでみる。


  1. N = 4 · 5 · 7 = 140 N 1 = 35 N 2 = 28 N 3 = 20
    35 t 1 1 m o d 4 - t 1 1 m o d 4 t 1 = - 1
    28 t 2 1 m o d 5 - 2 t 2 1 m o d 5 t 2 = 2
    20 t 3 1 m o d 7 - t 3 1 m o d 7 t 3 = - 1
    x 0 = 35 · - 1 · 2 + 28 · 2 · 1 + 20 · - 1 · 3 = - 70 + 56 - 60 = - 74

    よって求める答えは、

    x - 74 m o d 140 x 66 m o d 140

コード(Emacs)

Python 3

#!/usr/bin/env python3

from sympy import pprint
from sympy.ntheory.modular import crt

pprint(crt((4, 5, 7), (2, 1, 3)))

入出力結果(Terminal, Jupyter(IPython))

$ ./sample12.py
(66, 140)
$

HTML5

<pre id="output0"></pre>
<label for="k0">k = </label>
<input id="k0" type="number" step="1" value="10">

<button id="run0">run</button>
<button id="clear0">clear</button>

<script src="sample12.js"></script>

JavaScript

let pre0 = document.querySelector('#output0'),
    btn0 = document.querySelector('#run0'),
    btn1 = document.querySelector('#clear0'),
    input_k = document.querySelector('#k0'),
    inputs = [input_k],
    p = (x) => pre0.textContent += x + '\n',
    range = (start, end, step=1) => {
        let res = [];
        for (let i = start; i < end; i += step) {
            res.push(i);
        }
        return res;
    };

let output = () => {
    let k0 = parseInt(input_k.value, 10);
    
    p((66 + 140 * k0 - 2) % 4 === 0);
    p((66 + 140 * k0  - 1) % 5 === 0);
    p((66 + 140 * k0  - 3) % 7 === 0);

};

inputs.forEach((input) => input.onchange = output);
btn0.onclick = output;
btn1.onclick = () => pre0.textContent = '';
output();


















						

0 コメント:

コメントを投稿