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

C++で関数を使って2つの区間内の素数をすべて表示する方法

素数とは、1より大きい整数であり、約数が1とその数自身のみである数のことです。最初の素数としては、2、3、5、7、11、13、17などが挙げられます。

2つの区間の間には、複数の素数が存在することがあります。例えば、区間5から20の間にある素数は、5、7、11、13、17、19です。

ここでは、関数を使用して2つの区間内の素数を求め、表示するプログラムを紹介します。

サンプルコード

#include <iostream>
using namespace std;
void primeNumbers (int lbound, int ubound) {
    int flag, i;
    while (lbound <= ubound) {
       flag = 0;
       for(i = 2; i <= lbound/2; i++) {
          if(lbound % i == 0) {
             flag = 1;
             break;
          }
       }
       if (flag == 0)
       cout<<lbound<<" ";
       lbound++;
    }
}
int main() {
    int lowerbound = 20, upperbound = 50;
    cout<<"Prime numbers between "<<lowerbound<<" and "<<upperbound<<" are: ";
    primeNumbers(lowerbound,upperbound);
    return 0;
}

実行結果

Prime numbers between 20 and 50 are: 23 29 31 37 41 43 47

プログラムの解説

上記のプログラムでは、main()関数の中にcoutオブジェクトによる出力処理と、primeNumbers()関数の呼び出しだけが記述されています。下限値(lowerbound)と上限値(upperbound)を引数として渡すことで、素数の探索処理を関数側に任せる構造になっています。該当するコードは以下の通りです。

cout<<"Prime numbers between "<<lowerbound<<" and "<<upperbound<<" are: ";
primeNumbers(lowerbound,upperbound);

primeNumbers()関数では、lboundからuboundまでの各数値について、それが素数かどうかを順番に判定します。素数であると判明した数値は画面に表示されます。この一連の処理はwhileループによって実現されています。

whileループ内では、まずflagの初期値を0に設定します。forループの中で2からlbound/2までの数で割り切れるものが見つかった場合、その数は素数ではないためflagに1が代入され、break文でループを抜けます。forループ終了後もflagが0のままであれば、その数は素数であると判断され、出力されます。該当するコードは以下の通りです。

while (lbound <= ubound) {
    flag = 0;
    for(i = 2; i <= lbound/2; i++) {
       if(lbound % i == 0) {
          flag = 1;
          break;
       }
    }
    if (flag == 0)
    cout<<lbound<<" ";
    lbound++;
}

なお、このプログラムでは判定をlbound/2まで行うことで無駄な計算を減らしていますが、さらに効率化したい場合は√lbound(平方根)まで調べる方法や、エラトステネスの篩などのアルゴリズムを活用すると、より高速に素数を求めることができます。

  1. 【C言語】forループを使って1〜Nまでの素数をすべて表示するプログラム

    問題 実行時にユーザーが入力した値nに対して、1からnの間に存在するすべての素数を表示するC言語プログラムを作成しましょう。 解決策 ここでは、forループを使用して、実行時にユーザーから与えられた値nまでの範囲内にある素数をすべて検出・表示する方法を解説します。なお、素数とは、1とその数自身以外に約数を持たない、1より大きい自然数のことです。具体的には、2、3、5、7、11、13などが該当します。 アルゴリズム 以下は、実行時にユーザーが入力した値nまでの素数をすべて表示するためのアルゴリズムです。 ステップ1 − nの値を入力として読み込む ステップ2 − カウンタ変数countを0で初

  2. Javaで2つの区間の間にある素数を表示するプログラム

    この記事では、指定した2つの区間(範囲)の間にある素数を表示するJavaプログラムの作成方法について解説します。素数とは、1とその数自身の2つだけを約数に持ち、それ以外のどの数でも割り切ることのできない特別な数です。 ある数が素数であるのは、その約数が1とその数自身だけである場合です。たとえば11は素数であり、その約数は1と11のみです。素数の例としては、2、3、5、7、11、13などが挙げられます。なお、2は唯一の偶数の素数であり、それ以外の素数はすべて奇数になります。 実行例 以下に入力と出力の例を示します。 入力 入力値が次のとおりであるとします。 開始番号 : 1 終了番号 : 75