サンダラムのふるいを使用して特定の範囲の間で素数を生成するC++プログラム
これは、サンダラムのふるいを実装して、指定された範囲間で素数を生成するC++プログラムです。このアルゴリズムは、1934年にSundaramによって発見されました。
アルゴリズム
Begin
printPrimes(n)
Here we find out primes
smaller than n, we reduce n-2 to half. We call it New.
New = (n-2)/2;
Create an array marked[n] that is going
to be used to separate numbers of the form i+j+2ij from
others where 1 <= i <= j
Initialize all entries of marked[] as false.
Mark all numbers of the form i + j + 2ij as true
where 1 <= i <= j
for i=1 to New
a) j = i;
b) Loop While (i + j + 2*i*j) 2, then print 2 as first prime.
Remaining primes are of the form 2i + 1 where i is
index of NOT marked numbers. So print 2i + 1 for all i
such that marked[i] is false.
End サンプルコード
#include <bits/stdc++.h>
using namespace std;
int SieveOfSundaram(int m) {
int N= (m-2)/2;
bool marked[N + 1];
memset(marked, false, sizeof(marked));
for (int i=1; i<=N; i++)
for (int j=i; (i + j + 2*i*j) <= N; j++)
marked[i + j + 2*i*j] = true;
if (m > 2)
cout << 2 << " ";
for (int i=1; i<=N; i++)
if (marked[i] == false)
cout << 2*i + 1 << " ";
}
int main(void) {
int m = 10;
SieveOfSundaram(m);
return 0;
} 出力
2 3 5 7
-
関数を使用して2つの区間の間の素数を表示するC++プログラム
素数は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;
-
2つの区間の素数を表示するC++プログラム
素数は1より大きい整数であり、素数の唯一の要素は1とそれ自体でなければなりません。最初の素数のいくつかは2、3、5、7、11、13、17などです。 2つの区間の間に多くの素数が存在する可能性があります。たとえば、区間5と20の間の素数は-です。 5, 7, 11, 13, 17 and 19. 2つの区間の間で素数を見つけて表示するプログラムは次のとおりです。 例 #include <iostream> using namespace std; void PrimeNumbers (int lbound, int ubound) { int flag,