0
0

リュカ数を求めるプログラム

Last updated at Posted at 2024-07-07

リュカ数を求めるプログラムをC++で実装します。実行環境はVisual Studio Community 2022バージョン17.10.1とC++20です。

リュカ数の定義

リュカ数とは、初項を2、2項目を1とし、それ以降の項が直前の2つの項の和になっている数列の項と定義されています。$n$を正の整数とすると以下の数式で表すことが出来ます。

\displaylines{
L_1 = 2\\
L_2 = 1\\
L_{n+2} = L_n + L_{n+1}
}

リュカ数を計算するプログラム

リュカ数を求めるプログラムを以下に示します。

Lucas.cpp
#include <iostream>
#include <vector>

int main()
{
	int n; //出力する項数
	std::cin >> n;

	if (n == 1)
	{
		std::cout << 2 << std::endl;
	}
	else if (n == 2)
	{
		std::cout << 2 << std::endl;
		std::cout << 1 << std::endl;
	}
	else if (n >= 3)
	{
		std::vector<long long> lucas(n);
		lucas.at(0) = 2; //初項に2を設定
		lucas.at(1) = 1; //2項目に1を設定

		for (int i = 2; i < n; i++)
		{
			lucas.at(i) = lucas.at(i - 1) + lucas.at(i - 2); //直前の2項の和を計算する
		}

		for (auto x : lucas)
		{
			std::cout << x << std::endl;
		}
	}
	else
	{
		return 0; //入力された値が正の整数でなければプログラムを終了する
	}
}

実行すると整数$n$の入力が求められるので、正の整数を入力します。$n$を入力したら$n$項目までのリュカ数が表示されます。

リュカ数と黄金比

リュカ数の性質として、$n$が大きくなると、リュカ数の隣接する2項の比$L_{n+1}/L_n$は黄金比に収束することが知られています。この性質をプログラムで確認してみます。なお、C++では標準ライブラリのnumbersを用いて黄金比の値を取得できます。黄金比の値は1.61803のようです。

C++における黄金比の値の定義

GoldenRatio.cpp
#include <iostream>
#include <numbers>

int main()
{
	std::cout << std::numbers::phi;
    //1.61803
}

リュカ数列における隣接項の比の推移

Lucas.cpp
#include <iostream>
#include <vector>

int main()
{
	std::vector<long long> lucas(21); //21項のリュカ数列を格納するための配列
	lucas.at(0) = 2;
	lucas.at(1) = 1;

	for (int i = 2; i <= 20; i++)
	{
		lucas.at(i) = lucas.at(i - 1) + lucas.at(i - 2);
	}

	for (int i = 1; i <= 20; i++)
	{
		std::cout << double(lucas.at(i)) / lucas.at(i - 1) << std::endl; //リュカ数列の隣接する2項を求める
	}
}

出力

0.5
3
1.33333
1.75
1.57143
1.63636
1.61111
1.62069
1.61702
1.61842
1.61789
1.61809
1.61801
1.61804
1.61803
1.61804
1.61803
1.61803
1.61803
1.61803

1.61803に収束していくことがわかります。

参考

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0