この記事を三行にまとめると
入力した数字が完全数か判定ループの最大値を平方根にする
入力した数以下の完全数を抽出
この記事は以下の動画の中に出てきたサンプルコードを載せたものです。コピペなどが必要なときに使ってください。
HTMLとCSS
<div>
<input type="number" id="number">
<button type="button" id="start">検証開始</button>
</div>
<div id="divisor"></div>
<div id="result"></div>
<style>
* { font-size: 24px; font-family: 'メイリオ' }
body { text-align: center }
input, button { padding: 5px }
</style>
入力した数字が完全数か判定する
number = document.getElementById('number');
start = document.getElementById('start');
divisor = document.getElementById('divisor');
result = document.getElementById('result');
start.onclick = function() {
num = Number(number.value);
sum = 0, lists = [];
for(i = 1; i < num; i++) {
if(num % i == 0) {
sum += i;
lists.push(i);
}
}
divisor.innerText = '約数の合計は' + lists.join('+') + '=' + sum;
result.innerText = (sum == num) ? '完全数です!' : '完全数じゃないです';
}
ループの最大値を平方根にする
start.onclick = function() {
num = Number(number.value);
sum = 1, lists = [1];
sqrt = Math.sqrt(num);
for(i = 2; i <= sqrt; i++) {
if(num % i != 0) {
continue;
}
sum += i;
lists.push(i);
quot = num / i;
if(i != quot) {
sum += quot;
lists.push(quot);
}
}
divisor.innerText = '約数の合計は' + lists.join('+') + '=' + sum;
result.innerText = (sum == num) ? '完全数です!' : '完全数じゃないです';
}
入力した数以下の完全数を抽出
start.onclick = function() {
num = Number(number.value);
lists = [];
for(j = 2; j <= num; j++) {
if(divisor_sum(j)) {
lists.push(j);
}
}
result.innerText = num + '以下の完全数は' + lists.join(',');
}
function divisor_sum(num) {
sum = 1;
sqrt = Math.sqrt(num);
for(i = 2; i <= sqrt; i++) {
if(num % i != 0) {
continue;
}
sum += i;
quot = num / i;
if(i != quot) {
sum += quot;
}
}
return (sum == num);
}