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/2
は 50
であり、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
の内容を逆の順序で出力しました。