2018年4月6日金曜日

学習環境

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


  1. N=4·5·7=140N1=35N2=28N3=20
    35t11(mod4)-t11(mod4)t1=-1
    28t21(mod5)-2t21(mod5)t2=2
    20t31(mod7)-t31(mod7)t3=-1
    x0=35·(-1)·2+28·2·1+20·(-1)·3=-70+56-60=-74

    よって求める答えは、

    x-74(mod140)x66(mod140)

コード(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();
true
true
true

0 コメント:

コメントを投稿