Java
 Computer >> コンピューター >  >> プログラミング >> Java

Nまでのフィボナッチ数列の偶数項の合計を求めるJavaプログラム

この記事では、Nまでのフィボナッチ数列における偶数項の合計を求める方法を解説します。フィボナッチ数列とは、「直前の2つの整数の和」によって次の数が生成される数列のことで、偶数項の合計とは、その数列から条件に該当する項を取り出して足し合わせた値を指します。

フィボナッチ数列の基本

フィボナッチ数列は、直前の2つの数を加算することで次の数を順に生成していきます。数列は2つの初期値 F0 と F1 から始まり、それぞれ「0, 1」または「1, 1」の組み合わせを初期値として採用できます。一般形は次のとおりです。

Fn = Fn-1 + Fn-2

したがって、フィボナッチ数列は次のように表せます。

F8 = 0 1 1 2 3 5 8 13

また、初期値の選び方によっては次のようになります。

F8 = 1 1 2 3 5 8 13 21

処理内容の確認

入力

たとえば、入力値が次の場合を考えてみましょう。

n の値: 10

出力

このとき期待される出力は次のとおりです。

フィボナッチ数列の偶数項の合計: 10945

アルゴリズム

全体の処理の流れは、以下の手順になります。

ステップ1 - 処理を開始する
ステップ2 - 整数型変数 my_input、i、sum を宣言する
ステップ3 - ユーザーに整数値の入力を促す、または値をプログラム内に直接記述する
ステップ4 - 入力された値を読み取る
ステップ5 - forループで1からNまで反復処理を行い、直前の2つの数の和を現在のフィボナッチ数として代入する
ステップ6 - 結果を表示する
ステップ7 - 処理を終了する

例1: ユーザーに入力させる場合

この例では、Scannerクラスを使ってユーザーからの入力を受け付けます。オンラインの実行環境でも、そのまま動作を確認できます。

import java.util.Scanner;
import java.io.*;
public class FabonacciSum {
   public static void main(String[] args){
      int my_input, i, sum;
      System.out.println("Required packages have been imported");
      Scanner my_scanner = new Scanner(System.in);
      System.out.println("A reader object has been defined ");
      System.out.println("Enter the value of N: ");
      my_input = my_scanner.nextInt();
      int fabonacci[] = new int[2 * my_input + 1];
      fabonacci[0] = 0;
      fabonacci[1] = 1;
      sum = 0;
      for (i = 2; i <= 2 * my_input; i++) {
         fabonacci[i] = fabonacci[i - 1] + fabonacci[i - 2];
         if (i % 2 == 0)
            sum += fabonacci[i];
      }
      System.out.printf("Even sum of fibonacci series till number %d is %d" , my_input, sum);
   }
}

実行結果

Required packages have been imported
A reader object has been defined
Enter the value of N:
10
Even sum of fibonacci series till number 10 is 10945

例2: 値をあらかじめ決めておく場合

こちらの例では、整数値が事前に定義されており、その値を取得してコンソールに表示します。入力処理が不要になるため、ロジックの動作確認に便利です。

import java.util.Scanner;
import java.io.*;
public class FabonacciSum {
    public static void main(String[] args){
        int my_input, j, sum;
        my_input = 10;
        System.out.println("The value of N: ");
        int fabonacci[] = new int[2 * my_input + 1];
        fabonacci[0] = 0;
        fabonacci[1] = 1;
        sum = 0;
        for (j = 2; j <= 2 * my_input; j++) {
            fabonacci[j] = fabonacci[j - 1] + fabonacci[j - 2];
            if (j % 2 == 0)
                sum += fabonacci[j];
        }
        System.out.printf("The even sum of fibonacci series till number %d is %d" , my_input, sum);
    }
}

実行結果

The value of N:
The even sum of fibonacci series till number 10 is 10945

コードのポイント

  • 配列のサイズを「2 × N + 1」とすることで、Nの2倍の項数までフィボナッチ数を生成できます。
  • ループの中でインデックス i が偶数のときに、その項を合計変数 sum に加算しています。
  • 計算量は O(N) に収まるため、N がある程度大きくなっても高速に動作します。

なお、この実装では「配列上の偶数番目(インデックスが偶数)の項」を合計の対象としています。用途に応じて、「値そのものが偶数である項」だけを合計するよう条件式を変更することも可能です。

  1. Pythonプログラムで数の偶数の約数の合計を求める方法

    この記事では、以下の問題文に対する解決策について詳しく解説します。 問題文:ある数が与えられたとき、その数のすべての偶数の約数(因子)の合計を求めて表示します。 アプローチ まず、与えられた数が奇数であるかどうかを確認します。奇数には偶数の約数が存在しないため、その場合は 0 を返します。 数が偶数である場合は、実際の計算に進みます。ここでのポイントは、20(つまり1)以外のすべての項を掛け合わせることで、偶数の約数の合計が得られるという点です。 偶数の約数からすべての奇数を取り除くために、20 に相当する「1」を無視します。この処理を行うことで、残るのは偶数の約数のみとなります。なお、2 は

  2. Pythonで数の偶数の約数の合計を求めるプログラムの実装方法

    本記事では、以下の問題文に対する解決策について学びます。問題文整数 n が与えられたとき、その数の偶数の約数(偶因子)の合計を求めることが課題です。この問題を解くには、まず奇数の約数をすべて除外する必要があります。入力された数が奇数の場合、偶数の約数は一つも存在しないため、直接 0 を返します。そうでない場合は、以下のコードで示すアプローチに従います。アルゴリズムの考え方このアプローチでは素因数分解を活用します。約数の合計は「各素因数の冪乗の和の積」として表せるという性質を利用します。偶数の約数のみを対象とするため、素因数 2 の部分については 20(つまり 1)を除外し、21 以降の項だけを