Numeri superprimi

Correttore online – Intermedi

Un numero primo è un numero intero x > 1 che ha solo due divisori: 1 e x.
Supponiamo di disporre tutti i numeri primi in ordine crescente e denotiamo con pi l’elemento i-esimo.
Per esempio si avrà p1=2, p2=3, p3=5, p52=239.

Un numero primo pi di questa lista crescente si dice superprimo se il suo indice i è primo.
Per esempio, p2=3, p3=5p5=11 sono superprimi.

Dovete scrivere un programma che, assegnato un intero k stampi il k-esimo numero superprimo.

Dati di input

Il file di input contiene il numero intero k.

Dati di output

Il file di output deve contenere la soluzione (il k-esimo numero superprimo).

Esempi di input/output

input.txt output.txt
1 3
2 5

Autore/i

A.S. Stankevich, ACM ICPC Team, St. Petersburg State University of Information Technology, Mechanics and Optic


/*
    www.valcon.it
    Correttore online - Esercizi intermedi - Numeri superprimi
*/

#include
#include
#include

using namespace std;

vector v;

void carica_primi(long numero)
{
	long candidato=v[v.size()-1]+2;		// il prossimo primo potrebbe essere...
	while(v.size() < numero)            // allunga v fino a "numero"
	{		
		long p=1;									// se supera tutti i test
		while(p < v.size() && candidato%v[p] != 0)
			p++;
		if(p >= v.size())                           // se è primo lo aggiungo a v
			v.push_back(candidato);
		candidato += 2;                             // il prossimo candidato è...
	}
}


int main()
{
	ifstream fin ( "input.txt");
	ofstream fout("output.txt");
	
	long k;
	fin >> k;
	
	v.push_back(2);			 // 2 è primo
	v.push_back(3);          // 3 è primo
		
	carica_primi(k);         // riempi v fino a k primi
	long kk=v[k-1];          // k-esimo primo	
	carica_primi(kk);		 // riempi v fino a kk primi

	fout << v[kk-1];         // l'ultimo primo in v
}

Lascia un commento