Java で与えられた数の約数を見つける

Suraj P 2023年10月12日
Java で与えられた数の約数を見つける

この記事では、Java で特定の数の個別の因数または除数を見つける方法を学習します。

Java で与えられた数の約数を見つける

方法 1: ブルート フォース アプローチ

簡単な方法は、1 から n までのすべての数字をトラバースし、それらが n を適切に分割する (つまり、余りをゼロにする) かどうかを確認することです。 はいの場合、それは要因ではなく、他の要因です。

コード例:

import java.io.*;

class test {
  public static void main(String[] args) {
    int n = 24;

    for (int i = 1; i <= n; i++) {
      if (n % i == 0)
        System.out.println(i);
    }
  }
}

出力:

1
2
3
4
6
8
12
24

方法 2: n/2 までトラバースする

最初の方法から、n までトラバースするのではなく、n/2 で停止できることがわかります。これは、n/2 より大きい数値は、数値 n の因数になることは決してないためです。 番号そのもの。

たとえば、数 n は 100 であり、n/250 であり、51 や 52 のように 50 より大きい数は 100 の因数になることはありません。

コード例:

import java.io.*;

class GFG {
  public static void main(String[] args) {
    int n = 24;

    for (int i = 1; i <= n / 2; i++) {
      if (n % i == 0)
        System.out.println(i);
    }

    System.out.println(n);
  }
}

上記のコードでは、数値 n 自体が因数であるため、ループの後に追加の print ステートメントを記述しています。

出力:

1
2
3
4
6
8
12
24

方法 3: sqrt(n) までたどる

小さな観察を行うことで、2 番目の方法をさらに最適化できます。 よく見ると、要因がペアで発生していることがわかります。

たとえば、n = 100 で、その因数は 1,2,4,5, 10, 20, 25, 50, 100 です。したがって、ここで可能な異なるペアは (1,100), (2,50), (4,25), (5,20), (10,10).

したがって、最大で、sqrt(n) までの数値をチェックする必要があります。 この場合は 10 です。最後の (10,10) は特殊なケースです。数値が因数であることがわかっているからです。

コード例:

import java.io.*;
class GFG {
  public static void main(String[] args) {
    int num = 24;

    for (int i = 1; i <= Math.sqrt(num); i++) {
      if (num % i == 0) {
        if (num / i == i)
          System.out.println(i);

        else {
          System.out.println(i);
          System.out.println(num / i);
        }
      }
    }
  }
}

出力:

1
24
2
12
3
8
4
6

上記の出力では、因子はソートされていません。 auxiliary スペースを使用してソートされた出力を取得できます。

コード例:

import java.io.*;
import java.util.*;

class GFG {
  public static void main(String[] args) {
    int num = 24;
    ArrayList<Integer> store = new ArrayList<>();
    for (int i = 1; i <= Math.sqrt(num); i++) {
      if (num % i == 0) {
        if (num / i == i)
          System.out.println(i);

        else {
          System.out.println(i);
          store.add(num / i);
        }
      }
    }

    for (int j = store.size() - 1; j >= 0; j--) System.out.println(store.get(j));
  }
}

出力:

1
2
3
4
6
8
12
24

上記のコードでは、ArrayList を使用していくつかの要素を保存し、最後に ArrayList の内容を逆の順序で出力しました。

著者: Suraj P
Suraj P avatar Suraj P avatar

A technophile and a Big Data developer by passion. Loves developing advance C++ and Java applications in free time works as SME at Chegg where I help students with there doubts and assignments in the field of Computer Science.

LinkedIn GitHub

関連記事 - Java Math