Javaで2つの数の公約数の個数を求めるプログラムの書き方
この記事では、Javaを使って2つの整数の公約数(共通の約数)の個数を求めるプログラムを紹介します。再帰処理によるユークリッドの互除法で最大公約数(GCD)を計算し、その約数を効率よく数える手法を、サンプルコードとともにわかりやすく解説します。
サンプルコード
public class Demo{
static int find_gcd(int val_1, int val_2){
if (val_1 == 0)
return val_2;
return find_gcd(val_2%val_1,val_1);
}
static int common_divisors(int val_1,int val_2){
int no = find_gcd(val_1, val_2);
int result = 0;
for (int i=1; i<=Math.sqrt(no); i++){
if (no%i==0){
if (no/i == i)
result += 1;
else
result += 2;
}
}
return result;
}
public static void main(String args[]){
int val_1 = 68, val_2 = 34;
System.out.println("The common divisors between the two numbers is ");
System.out.println(common_divisors(val_1, val_2));
}
}
実行結果
The common divisors between the two numbers is 4
プログラムの仕組み
1. 最大公約数を求める(find_gcdメソッド)
Demoクラスには、2つの引数を受け取って最大公約数を返す静的メソッド find_gcd が定義されています。このメソッドはユークリッドの互除法を再帰的に適用しており、第1引数が0になった時点で、残った第2引数が最大公約数として返されます。
2. 公約数の個数を数える(common_divisorsメソッド)
common_divisors メソッドでは、まず find_gcd を呼び出して2つの数の最大公約数を取得します。その後、1から最大公約数の平方根まで順にループしながら、以下の条件で約数を数えます。
- 最大公約数を現在の値 i で割り切れる場合、i は約数です。
- 「最大公約数 ÷ i」と「i」が同じ値になる場合(平方数の平方根など)は、重複を避けるためカウントを1だけ増やします。
- それ以外の場合は、約数は「i」と「最大公約数 ÷ i」のペアで存在するため、カウントを2増やします。
この方法により、1から最大公約数まで全てを調べる代わりに、平方根までのループだけで済むため、計算量をO(√n)に抑えられ、大きな数でも高速に処理できます。
3. mainメソッドでの実行
mainメソッドでは、例として val_1 = 68、val_2 = 34 の2つの値を初期化し、common_divisors メソッドを呼び出しています。68と34の最大公約数は34であり、その約数は「1、2、17、34」の4つなので、実行結果として「4」が出力されます。
-
C言語でアームストロング数を判定するプログラムの作成方法
アームストロング数とは? 本記事では、入力された整数 n がアームストロング数(Armstrong number)であるかどうかを判定するCプログラムについて解説します。 アームストロング数とは、各桁の数字をそれぞれ「桁数(位数)」でべき乗し、その総和が元の数値と等しくなる数のことです。例えば、4桁の数 1634 は 14 + 64 + 34 + 44 = 1 + 1296 + 81 + 256 = 1634 となるため、アームストロング数です。 アームストロング数を求める基本的な考え方は、次の式のように表せます。 計算式: wxyz…. = pow(w, n) + pow(x, n) + p
-
Pythonで2つの数の公約数を求めるプログラムの書き方
はじめに この記事では、以下の問題文に対する解決方法について学んでいきます。 問題文 2つの整数が与えられたとき、それらに共通する約数(公約数)の個数を表示する必要があります。 アプローチの考え方 まず、入力として受け取った2つの数のうち、小さい方の値(最小値)を計算します。続いて、1からその最小値までの各値で2つの数を順番に割っていき、両方の数を割り切ることができるかどうかをループ処理で確認します。 条件が真(True)と評価されるたびに、カウンターを1ずつ増加させます。最終的なカウンターの値が、2つの数の公約数の個数となります。 実装例 それでは、以下のコードで実際の実装を見てみましょう。