자바스크립트에서 콜라츠 예상 동작 수행

콜라츠 예상 동작을 확인해 봅니다.



JavaScript에서 콜라츠 예상 동작을 실행하는 프로그램을 작성해 보았습니다.

· 자연수 입력
・「짝수라면 2로 나누고, 홀수라면 3배로 1을 더한다」라고 하는 조작을 반복한다
・1이 되면 종료한다

상기 조작으로 반드시 1이 되어 프로그램이 정지한다는 것이 「콜라츠 예상」입니다.
'예상'이라고 불리는 대로 2020년 현재 증명되지 않았습니다.



CollatzProblem.html
<html>
<head>
  <meta http-equiv="Content-Type" context="text/html; charset=UTF-8" />
  <meta charset="UTF-8" />
  <title>JavaScriptでコラッツ予想</title>
<script>

function doCalc() {
    var txtN1 = document.getElementById("txtN1");

    var n1, n2, strResult;
    var vWork = [];
    var vOut = [];

    n1 = parseInt(txtN1.value, 10);
    n2 = n1;

    vOut.push("" + n1);

    while (1) {
        if (n2 <= 1) { break; }

        if (n2 % 2 == 0) {
            n1 = n2
            n2 = n2 / 2;
            strResult = "" + n1 + " / 2 = " + n2;
            vOut.push(strResult);
        } else {
            n1 = n2
            n2 = n2 * 3 + 1;
            strResult = "" + n1 + " * 3 + 1 = " + n2;
            vOut.push(strResult);
        }
    }

    document.getElementById("result").innerHTML = vOut.join("\n");
}

</script>
</head>
<body>

<h2>コラッツ予想</h2>

<ul>
<li>自然数を入力する</li>
<li>「偶数なら2で割り、奇数なら3倍して1を足す」という操作を繰り返す</li>
<li>1になったら終了する</li>
</ul>

4桁 まで
<input type="text" id="txtN1" value="" maxlength="4" size="7" oninput="value = value.replace(/[^0-9]+/i,'');" />
<input type="button" value="計算" onclick="doCalc()" /><br />
<br />

<textarea id="result" rows="50" col="20" style="width:700px;height:400px;">
</textarea>

</body>
</html>

좋은 웹페이지 즐겨찾기