Ссылка на вопрос: https://vn.spoj.com/problems/MPRIME/
У меня есть 3 массива C DE, который:
C содержит простое число.
D содержит пару из 2 двух соседних простых чисел (например: 2 и 3 - два соседних простых числа (C [1] и C [2], поэтому D [1] равно 23, тогда D [2] равно 57, D [3] - это 1113 и т. Д.
E содержит числа из D, которое является простым числом (например, 23 - простое число, поэтому E [1] = 23, E [2] = 3137, .. .)
Вопрос в том, чтобы напечатать число E [n] с 0 <= n <= 500. </p>
Я пытался это сделать, но когда я хочу распечатать ответ, он не Ничего не печатаю.
Вот мой код:
#include <bits/stdc++.h>
#define fast ios_base::sync_with_stdio(0); cin.tie(0);
#define endl "\n"
typedef long long ll;
using namespace std;
const int oo = 1500000;
int n;
ll C[oo], D[oo], E[oo];
bool Flag[oo];
void makePrime_and_create_C ()
{
for ( int i = 2; i <= oo; i ++ )
Flag[i] = true;
for ( int i = 2; i <= oo; i ++ )
{
if ( Flag[i] == true )
{
for ( int j = 2 * i; j <= oo; j += i )
Flag[j] = false;
}
}
int cnt = 0;
for ( int i = 2; i <= oo; i ++ )
if ( Flag[i] == true )
C[++cnt] = i;
}
int cnt_ele (int x)
{
int cnt = 0;
while ( x > 0 )
{
cnt ++;
x/= 10;
}
return pow(10, cnt);
}
void pairing ()
{
int cnt = 0;
for ( int i = 1; i <= oo; i += 2 )
{
int tmp = C[i] * cnt_ele(C[i]) + C[i + 1];
D[++cnt] = tmp;
}
}
int main ()
{
makePrime_and_create_C ();
pairing ();
for ( int i = 1; i <= oo; i ++ )
if ( Flag[D[i]] == true )
E[i] = D[i];
int n; cin >> n;
cout << E[n];
return 0;
}
Tks for help <3 </p>