SPOJ MPRIME сверхурочные - PullRequest
0 голосов
/ 12 июля 2020

Ссылка на вопрос: 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>

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...