読み込み中...

JavaScriptで約数を求めよう!サンプルコード7選で徹底解説

JavaScript初心者が約数を求める方法を学ぶ JS
この記事は約8分で読めます。

【サイト内のコードはご自由に個人利用・商用利用いただけます】

この記事では、プログラムの基礎知識を前提に話を進めています。

説明のためのコードや、サンプルコードもありますので、もちろん初心者でも理解できるように表現してあります。

本記事のサンプルコードを活用して機能追加、目的を達成できるように作ってありますので、是非ご活用ください。

※この記事は、一般的にプロフェッショナルの指標とされる『実務経験10,000時間以上』を満たす現役のプログラマチームによって監修されています。

※Japanシーモアは、常に解説内容のわかりやすさや記事の品質に注力しております。不具合、分かりにくい説明や不適切な表現、動かないコードなど気になることがございましたら、記事の品質向上の為にお問い合わせフォームにてご共有いただけますと幸いです。
(送信された情報は、プライバシーポリシーのもと、厳正に取扱い、処分させていただきます。)

はじめに

JavaScriptの分野に足を踏み入れたばかりの皆さん、約数の計算に頭を悩ませていませんか?

ご安心ください。

この記事では、JavaScriptを使って約数を求める方法を、基礎から応用まで詳しく解説します。

読み進めるうちに、約数の計算がスラスラできるようになりますよ。

さあ、一緒に学んでいきましょう!

●JavaScriptで約数を求める方法

約数を求めることは、プログラミングの基本的なタスクの一つです。

JavaScriptを使えば、効率的かつ簡潔に約数を計算することができます。

ここでは、基本的なアルゴリズムから始めて、段階的に理解を深めていきましょう。

○基本的なアルゴリズム

約数を求めるための基本的な考え方は至ってシンプルです。

与えられた数値に対して、1からその数値自身までの整数で順番に割っていきます。

割り切れた(つまり余りが0になった)数が約数となるわけです。

この単純な原理を使って、JavaScriptでプログラムを組んでいきます。

○サンプルコード1:約数を求める基本的なコード

まずは、最も基本的な約数を求めるコードを見てみましょう。

このコードでは、指定した数値の約数を全て見つけ出し、コンソールに表示します。

const num = 12;

for (let i = 1; i <= num; i++) {
  if (num % i === 0) {
    console.log(i);
  }
}

このコードでは、forループを使って1から指定した数値(この場合は12)までの整数を順に調べていきます。

割り算の結果、余りが0になる数をコンソールに出力しています。

○サンプルコード2:約数を求めて配列に格納するコード

次に、見つけた約数を配列に格納する方法を紹介します。

これにより、後で約数のリストを使って何か別の処理を行いたい場合に便利です。

const num = 12;
const divisors = [];

for (let i = 1; i <= num; i++) {
  if (num % i === 0) {
    divisors.push(i);
  }
}

console.log(divisors);

このコードでは、空の配列を用意し、約数を見つけるたびにその配列に追加していきます。

最後に、約数のリスト全体をコンソールに表示します。

●応用例とサンプルコード

基本的な約数の求め方を理解したところで、次はより実践的な応用例を見ていきましょう。

ここでは、約数の個数を求める方法、最大公約数や最小公倍数を計算する方法など、より高度な使い方を紹介します。

○サンプルコード3:約数の個数を求めるコード

約数の個数を知りたい場合は、先ほどの配列を利用して簡単に求めることができます。

const num = 12;
const divisors = [];

for (let i = 1; i <= num; i++) {
  if (num % i === 0) {
    divisors.push(i);
  }
}

console.log(`${num}の約数の個数は${divisors.length}個です`);

このコードでは、配列のlengthプロパティを使って約数の個数を取得しています。

○サンプルコード4:最大公約数を求めるコード

最大公約数(GCD: Greatest Common Divisor)を求める際には、効率的なアルゴリズムとしてユークリッドの互除法が知られています。

function gcd(a, b) {
  while (b !== 0) {
    const temp = b;
    b = a % b;
    a = temp;
  }
  return a;
}

const num1 = 48;
const num2 = 36;
console.log(`${num1}と${num2}の最大公約数は${gcd(num1, num2)}です`);

このコードでは、ユークリッドの互除法を実装した関数gcdを定義し、二つの数の最大公約数を求めています。

○サンプルコード5:最小公倍数を求めるコード

最小公倍数(LCM: Least Common Multiple)は、最大公約数を利用して効率的に求めることができます。

function gcd(a, b) {
  while (b !== 0) {
    const temp = b;
    b = a % b;
    a = temp;
  }
  return a;
}

function lcm(a, b) {
  return (a * b) / gcd(a, b);
}

const num1 = 48;
const num2 = 36;
console.log(`${num1}と${num2}の最小公倍数は${lcm(num1, num2)}です`);

このコードでは、先ほど定義したgcd関数を利用して、最小公倍数を求める関数lcmを実装しています。

●注意点と対処法

約数を求めるプログラムを作成する際には、いくつかの注意点があります。

ここでは、よくある問題とその対処法について説明します。

○数値以外の入力に対する対処

約数を求めるプログラムは、入力が数値であることを前提としています。

そのため、数値以外の入力が与えられた場合の対処が必要です。

function isNumeric(n) {
  return !isNaN(parseFloat(n)) && isFinite(n);
}

const input = prompt("数値を入力してください");

if (isNumeric(input)) {
  const num = parseInt(input);
  // 約数を求める処理
} else {
  console.log("有効な数値を入力してください");
}

このコードでは、入力が数値かどうかをチェックする関数isNumericを定義し、入力値の検証を行っています。

○大きな数値に対する対処

非常に大きな数値に対して約数を求めようとすると、計算に時間がかかってしまう可能性があります。

const threshold = 1000000;
const num = parseInt(prompt("数値を入力してください"));

if (num > threshold) {
  console.warn("大きな数値のため、計算に時間がかかる可能性があります");
  if (!confirm("続行しますか?")) {
    console.log("処理を中止しました");
    // 処理を中止する
  }
}

// 約数を求める処理

このコードでは、入力された数値が一定の閾値を超えた場合に警告を表示し、ユーザーに続行の確認を求めています。

●カスタマイズ方法

約数を求めるプログラムは、様々な方法でカスタマイズすることができます。

ここでは、よく使われるカスタマイズ方法を二つ紹介します。

○サンプルコード6:約数を求める関数を作成するコード

約数を求める処理を関数化することで、コードの再利用性が高まります。

function getDivisors(num) {
  const divisors = [];
  for (let i = 1; i <= Math.sqrt(num); i++) {
    if (num % i === 0) {
      divisors.push(i);
      if (i !== num / i) {
        divisors.push(num / i);
      }
    }
  }
  return divisors.sort((a, b) => a - b);
}

const number = 48;
console.log(`${number}の約数は${getDivisors(number)}です`);

このコードでは、効率化のために平方根までしかループを回していません。

また、結果を昇順にソートしています。

○サンプルコード7:複数の数値に対して約数を求めるコード

複数の数値に対して約数を求めたい場合は、先ほどの関数を活用して次のように実装できます。

function getDivisors(num) {
  const divisors = [];
  for (let i = 1; i <= Math.sqrt(num); i++) {
    if (num % i === 0) {
      divisors.push(i);
      if (i !== num / i) {
        divisors.push(num / i);
      }
    }
  }
  return divisors.sort((a, b) => a - b);
}

const numbers = [12, 24, 48];

numbers.forEach(number => {
  console.log(`${number}の約数は${getDivisors(number)}です`);
});

このコードでは、配列に格納された複数の数値それぞれに対して約数を求め、結果を表示しています。

まとめ

JavaScriptで約数を求める方法について、基本から応用まで幅広く解説してきました。

単純な約数の計算から始まり、最大公約数や最小公倍数の求め方、さらには効率的なアルゴリズムの実装まで、様々なテクニックを開設してきました。

ポイントは、基本的な原理を理解し、それを効率的に実装することです。

また、入力値の検証や大きな数値への対処など、実用的な場面で必要となる注意点も押さえておくことが大切です。

知識を活かして、皆さんなりの約数計算プログラムを作ってみてください。

プログラミングの面白さは、自分なりのアイデアを形にできるところにあります。

ぜひ、創意工夫を重ねて、より良いコードを目指してください。