Spunem că un număr natural este aproape prim dacă el poate fi scris ca produs de două numere prime. De exemplu 6
și 25
sunt aproape prime pentru că 6 = 2 * 3
, iar 25 = 5 * 5
. Considerăm șirul crescător al numerelor naturale aproape prime: 4
, 6
, 9
, 10
, 14
, 15
, 21
, … Acestora li se asociază câte un număr de ordine, numerotarea începând cu 1
. Deci 4
este primul număr aproape prim, 6
este al doilea număr, 9
este al treilea etc.
Cerința
Dat un număr natural N
, să se determine al N
-lea număr aproape prim.
Date de intrare
Programul citește de la tastatură numărul N
.
Date de ieșire
Programul va afișa pe ecran un singur număr natural, reprezentând al N
-lea număr aproape prim.
Restricții și precizări
1 ≤ N ≤ 23.378
Exemplul 1:
Intrare
4
Ieșire
10
Exemplul 2:
Intrare
300
Ieșire
1003
#include <bits/stdc++.h> using namespace std; int E[100001], c, n; bool e[1000001], B[1000001]; int x = 1000001; void eratostene(){ e[0] = e[1] = 1; for(int i = 2 ; i * i <= x ; ++i) for(int j = 2 ; i * j <= x ; ++j) e[i * j] = 1; for(int i = 1; i <= 1000000; ++i) if(!e[i]) E[++c] = i; for(int i = 1; i < c; ++i) for(int j = 1; j <= c; ++j) if(1LL * E[i] * E[j] < 1000001) B[E[i] * E[j]] = 1; else i++, j=1; for(int i = 1; n != 0; ++i){ if(B[i] == 1){ n--; if(n==0){ cout << i; return; } } } } int main(){ cin >> n; eratostene(); }