第14回【JavaScript】約数の個数、約数の列挙

現在取り組んでいるのは、paiza ラーニング問題集「ループメニュー 2」になります。

はじめに

猫とキャンプと野球観戦と AWS が大好きな旦那、LeoSaki です。モフモフしたい。

JavaScript をゼロから勉強してみよう、のコーナー 14 回目です。

隙間時間も活用します。LunaSaki(嫁)が風呂に入っている間、とか。LunaSaki(嫁)が洗い物をしている間、とか。家事を手伝うこともなく、好きな勉強をしている LeoSaki(旦那)に対して何も言わないでいてくれる LunaSaki(嫁)に感謝です。

それでは、今日も頑張ってみようと思います。

約数の個数 (paizaランク D 相当)

整数 N が与えられます。
N の約数の個数を出力してください。
約数とは、N を割り切る整数のことを指します。


入力される値

N

・ 1 行で整数 N が与えられます。

入力値最終行の末尾に改行が1つ入ります。


期待する出力

N の約数の個数を出力してください。

また、末尾に改行を入れ、余計な文字、空行を含んではいけません。


すべてのテストケースにおいて、以下の条件をみたします。

・ 1 ≦ N ≦ 1,000


入力例

100

出力例

9

「約数の個数」って検索ワードは、1 位 2 位を争うくらい人気があるみたいです。とりあえず、正攻法で書いてみようと思います。

JavaScript
process.stdin.resume();
process.stdin.setEncoding('utf8');

var lines = [];
var reader = require('readline').createInterface({
  input: process.stdin,
  output: process.stdout
});
reader.on('line', (line) => {
  lines.push(line);
});
reader.on('close', () => {
  const n = Number(lines[0]);
  let cnt = 0;
  for (let i = 1; i <= n; i++) {
      if (n % i == 0) cnt++;
  }
  console.log(cnt);
});
Python
N = int(input())
cnt = 0
for i in range(1,N+1):
    if N % i == 0:
        cnt += 1
print(cnt)

約数の列挙 (paizaランク D 相当)

整数 N が与えられます。
N の約数を小さい方から順に改行区切りで出力してください。


入力される値

N

・ 1 行で整数 N が与えられます。

入力値最終行の末尾に改行が1つ入ります。


期待する出力

N の約数を小さい方から順に改行区切りで出力してください。

また、末尾に改行を入れ、余計な文字、空行を含んではいけません。


すべてのテストケースにおいて、以下の条件をみたします。

・ 1 ≦ N ≦ 1,000


入力例

100

出力例

1
2
4
5
10
20
25
50
100

さっきの約数の列挙、console.log() を工夫すれば解ける問題。

JavaScript
process.stdin.resume();
process.stdin.setEncoding('utf8');

var lines = [];
var reader = require('readline').createInterface({
  input: process.stdin,
  output: process.stdout
});
reader.on('line', (line) => {
  lines.push(line);
});
reader.on('close', () => {
  const n = Number(lines[0]);
  let cnt = 0;
  for (let i = 1; i <= n; i++) {
      if (n % i == 0) console.log(i);
  }
});
Python
N = int(input())
for i in range(1,N+1):
    if N % i == 0:
        print(i)

最後に

Python のときは平方根を利用した解答を考えたりしていたけれど、今後、そういう問題が出るのを知っているので。正攻法の解き方だけチャレンジしました。

JavaScrip の for 文って、結構自由度高くて書きやすいなぁっていう印象。Python は、range の中で足し算したり引き算したり、ちょっとした工夫が必要になっちゃいますよね。

引き続き、よろしくお願いいたします!

Python の第14回はこちら