【C++】nより小さい最も近い素数を求めるアルゴリズムと実装方法
数値 n が与えられたとき、n より小さい最も近い素数を求める問題について解説します。
この問題は、n - 1 から順に素数かどうかをチェックしていけば、簡単に答えを見つけることができます。まずは具体例を見てみましょう。
入力例と出力例
入力:
10
出力:
7
10 未満の数の中で最も近い素数は 7 であるため、出力は 7 となります。
アルゴリズム
解法の手順は以下の通りです。
- 数値 n を初期化します。
n - 1から 1 まで逆順にループを回します。- 最初に見つかった素数を返します。
- n 未満に素数が存在しない場合は
-1を返します。
C++での実装
上記のアルゴリズムを C++ で実装したコードが以下です。
#include <bits/stdc++.h>
using namespace std;
bool isPrime(int n) {
if (n == 2) {
return true;
}
for (int i = 2; i <= ceil(sqrt(n)); i++) {
if (n % i == 0) {
return false;
}
}
return true;
}
int getNearestPrimeNumber(int n) {
for (int i = n - 1; i > 1; i--) {
if (isPrime(i)) {
return i;
}
}
return -1;
}
int main() {
int n = 20;
cout << getNearestPrimeNumber(n) << endl;
return 0;
}コードのポイント
- isPrime 関数: 素数判定を行う関数です。2 の平方根までの整数で割り切れるかどうかを確認することで、効率的に判定できます。
- getNearestPrimeNumber 関数:
n - 1から降順に調べ、最初に見つかった素数を返します。
実行結果
上記のコードを実行すると、以下の結果が出力されます。
19
20 未満で最も近い素数は 19 なので、正しく出力されていることがわかります。
まとめ
n より小さい最も近い素数を求めるには、n - 1 から順に素数判定を行っていくのがシンプルで効果的な方法です。素数判定では平方根まで確認すれば十分なため、計算量を抑えることができます。
-
C++で指定された数がプロニック数(Pronic Number)かどうかを判定する方法
プロニック数(Pronic Number)とは、点を長方形の形にきれいに配置できる数のことで、「矩形数」と呼ばれることもあります。その定義は非常にシンプルで、2つの連続する整数の積として表される数です。つまり、プロニック数 n は次の式で表せます。n = x × (x + 1)最初のいくつかのプロニック数を列挙すると、0, 2, 6, 12, 20, 30, 42, 56, 72, 90, 110, 132, 156, 182, 210, 240, 272, 306, 342 となります。プロニック数の具体例2 = 1 × 26 = 2 × 312 = 3 × 420 = 4 × 530 =
-
C++で数値が完全素数(フルプライム)かどうかを判定する方法
完全素数(フルプライム)とは?本記事では、ある数値が「完全素数(フルプライム)」であるかどうかを判定する方法を解説します。完全素数とは、その数値自体が素数であり、かつ各桁の数字もすべて素数である数のことです。例えば、37は2桁とも素数の数字(3と7)で構成され、数値全体も素数であるため、完全素数です。一方、97は数値自体は素数ですが、各桁に9という素数でない数字が含まれているため、完全素数ではありません。判定のアプローチ効率的な判定方法は以下の2段階で行います。まず、素数でない桁が含まれていないかを確認します。各桁の数字は0から9の範囲に収まるため、この範囲で素数となるのは2、3、5、7の4つ