Pagini recente » Cod sursa (job #2245466) | Cod sursa (job #25719) | Cod sursa (job #933252) | Cod sursa (job #2047138) | Cod sursa (job #865546)
Cod sursa(job #865546)
#include <fstream>
#include <bitset>
using namespace std;
//Vectorul pentru Ciurul lui Eratostenes
bitset<1300005> ciur;
//k-ul din cerinta
int k;
//Functie ce intoarce raspunsul, folosind Ciurul lui Eratostenes
long long eratostenes()
{
//Doua contoare
long long int i,j;
//Se marcheaza numerele pare
for(i=4;i<=1300000;i+=2)
ciur[i]=1;
//Se numara cate numere prime au fost pana la pasul curent,
//initializarea cu 1 survine de la faptul ca 2 e prim si nu il mai consideram in in urmatorul for
int poz=1;
//Se parcurg toate numerele de la 3 la 1300000, nu pana la sqrt(1300000)=1140,
//caci numarul cautat poate fi mai mare de atat
for(i=3;i<=1300000;i+=2)
{
//Daca e prim
if(ciur[i]==0)
{
//Ii marcam multipli mai mici ca 1300000, deci, daca i depaseste 1140, se omite oricum pasul acesta
for(j=i*i;j<=1300000;j+=i)
ciur[j]=1;
//Se incrementeaza numarul de numere prime gasite
poz++;
//Daca avem destule numere prime, dam raspunsul egal cu patratul primului numar prim de dupa al k-lea
if(poz==k+1)
return (i*i);
}
}
//Pentru a scapa de warning-uri, trebuie ca functia sa aiba un return 0; la sfarsit
return 0;
}
int main()
{
//Deschiderea fisierelor de intrare si iesire
ifstream fin("prim.in");
ofstream fout("prim.out");
//Citirea numarului de numere prime ce trebuie gasite
fin>>k;
//Afisarea raspunsului furnizat de functia de mai sus
fout<<eratostenes()<<'\n';
//Inchiderea fisierelor de intrare si iesire
fin.close();
fout.close();
return 0;
}