Javaで2つの整数の間のアームストロング数を求める方法
この記事では、Javaを使って指定した2つの数値の間に存在するアームストロング数(Armstrong数)をすべて表示する方法を解説します。
アームストロング数とは?
アームストロング数とは、各桁の数字を取り出して3乗し、その合計が元の数と等しくなる数のことです。
より一般的に定義すると、n桁の整数の各桁を分離して3乗し、合計した結果が元の数と一致する場合、その整数はアームストロング数と呼ばれます。数式で表すと次のようになります。
abcd... = a³ + b³ + c³ + d³ + ...
3桁のアームストロング数の場合、各桁の3乗の合計がその数そのものと一致します。
例1:153の場合
153 = 1³ + 5³ + 3³ = 1 + 125 + 27 = 153
例2:371の場合
371 = 3³ + 7³ + 1³ = 27 + 343 + 1 = 371
それでは、2つの数値の間のアームストロング数を求めるプログラムを見ていきましょう。
入力と出力の例
入力
1 と 500
出力
1から500までのアームストロング数は 1, 153, 370, 371, 407 です
アルゴリズム
ステップ1:開始 ステップ2:4つの整数 my_input_1、my_input_2、i、sum を宣言する ステップ3:ユーザーに2つの整数値の入力を促す/整数値を定義する ステップ4:値を読み込む ステップ5:forループを実行し、%、/、* 演算子を使ってアームストロング数を生成する ステップ6:10で割った余りを 'rem' として取得する ステップ7:'rem' を3回掛け合わせ、'sum' に加算して現在の 'sum' とする ステップ8:'check' を10で割り、その結果を現在の 'check' とする ステップ9:結果を表示する ステップ10:終了
例1:ユーザーからの入力を受け付ける場合
この例では、Scannerクラスを使ってユーザーから数値を入力として受け付けます。オンラインのコンパイル環境でも実際に動作を試すことができます。
import java.util.Scanner;
public class ArmstrongNumbers {
public static void main(String args[]){
int input_1, input_2, check, rem, sum, i;
Scanner my_scanner = new Scanner(System.in);
System.out.println("必要なパッケージがインポートされました");
System.out.println("Scannerオブジェクトが定義されました");
System.out.println("最初の数値を入力してください:");
input_1 = my_scanner.nextInt();
System.out.println("上限の数値を入力してください:");
input_2 = my_scanner.nextInt();
System.out.println("アームストロング数は以下の通りです:");
for (i = input_1; i<input_2; i++){
sum = 0;
check = i;
while(check != 0) {
rem = check % 10;
sum = sum + (rem * rem * rem);
check = check / 10;
}
if(sum == i){
System.out.println(i);
}
}
}
}出力
必要なパッケージがインポートされました Scannerオブジェクトが定義されました 最初の数値を入力してください: 1 上限の数値を入力してください: 500 アームストロング数は以下の通りです: 1 153 370 371 407
例2:値を事前に定義しておく場合
この例では、整数値があらかじめ定義されており、その値にアクセスしてコンソールに表示します。ユーザー入力が不要なため、処理の流れをシンプルに確認できます。
public class ArmstrongNumbers {
public static void main(String args[]){
int input_1, input_2, check, rem, sum, i;
input_1 = 1;
input_2 = 500;
System.out.printf("最初の数値は %d、上限は %d です", input_1, input_2);
System.out.println("\nアームストロング数は以下の通りです:");
for (i = input_1; i<input_2; i++){
sum = 0;
check = i;
while(check != 0) {
rem = check % 10;
sum = sum + (rem * rem * rem);
check = check / 10;
}
if(sum == i){
System.out.println(i);
}
}
}
}出力
最初の数値は 1、上限は 500 です アームストロング数は以下の通りです: 1 153 370 371 407
まとめ
このように、剰余演算子(%)で各桁の数字を取り出し、3乗して合計する処理をwhileループで繰り返すことで、アームストロング数を簡単に判定できます。範囲指定してforループで回すことで、任意の2つの整数の間に存在するすべてのアームストロング数を効率的に見つけることが可能です。
-
Javaで数値がフィボナッチ数かどうかを判定する方法|完全平方数を使ったチェックプログラム
ある整数がフィボナッチ数(0, 1, 1, 2, 3, 5, 8, 13, 21…と続く数列に含まれる数)であるかどうかは、実際に数列を生成しなくても、数学的な性質を利用することで効率的に判定できます。 判定の原理:完全平方数の性質 有名な定理によると、n がフィボナッチ数であるのは、「5n² + 4」または「5n² − 4」のどちらか一方が完全平方数になる場合、かつその場合に限ることが証明されています。これを利用すると、O(1) に近い計算量でフィボナッチ数かどうかをチェックできます。 フィボナッチ数判定のJavaプログラム 以下が、与えられた数値がフィボナッチ数かどうかをチェックするJav
-
Pythonでアームストロング数を判定するプログラムの書き方
この記事では、与えられた整数が「アームストロング数(Armstrong number)」であるかどうかを判定するための考え方と、Pythonによる具体的な実装方法を解説します。 問題の定義 整数 n が与えられたとき、その整数がアームストロング数であるかどうかを判定することを目標とします。 アームストロング数とは? n 桁の正の整数 abcd… が次の条件を満たすとき、この数は「n 次(オーダー n)のアームストロング数」と呼ばれます。 abcd... = a^n + b^n + c^n + d^n + … つまり、各桁の数字を「桁数乗」した値の総和が、元の数と一致するかを確認す