Informatică, întrebare adresată de Niluco, 8 ani în urmă

#302

Cerinţa

Se dau n numere naturale cu cel mult două cifre fiecare. Determinaţi cel mai mare număr prim de două cifre care nu apare printre numerele date.


Date de intrare

Fişierul de intrare cautaprim.in conţine pe prima linie numărul n; urmează cele n numere, dispuse pe mai multe linii şi separate prin spaţii.


Date de ieşire

Fişierul de ieşire cautaprim.out va conţine pe prima linie cel mai mare număr prim de două cifre care nu apare printre numerele date. Dacă printre numerele date se află toate numerele prime de două cifre, în fişier se va scrie valoarea 0.


Restricţii şi precizări

1 ≤ n ≤ 100000




Exemplu

cautaprim.in


8

3 19 3 65 3 97 14 3

cautaprim.out


89

Răspunsuri la întrebare

Răspuns de boiustef
1

#include <iostream>

#include <fstream>

#include <bitset>

using namespace std;

bitset<100>vnum, vprim;

int main()

{

   ifstream f("cautaprim.in");

   ofstream g("cautaprim.out");

   int num, i, n, gasit=0;

   f >> n;

   for (i=1; i<=n; ++i)

   {

       f >> num; vnum[num]=1;

   }

   vprim[11]=vprim[13]=vprim[17]=vprim[19]=vprim[23]=vprim[29]=1;

   vprim[31]=vprim[37]=vprim[41]=vprim[43]=vprim[47]=vprim[53]=1;

   vprim[59]=vprim[61]=vprim[67]=vprim[71]=vprim[73]=vprim[79]=1;

   vprim[83]=vprim[89]=vprim[97]=1;

   for (i=97; i>10 && gasit==0;--i)

       if (vprim[i] && vnum[i]==0) { gasit=1; g << i; }

   if (gasit==0) g << 0;

   return 0;

}


Niluco: vprim[11]=vprim[13]=vprim[17]=vprim[19]=vprim[23]=vprim[29]=1;

   vprim[31]=vprim[37]=vprim[41]=vprim[43]=vprim[47]=vprim[53]=1;

   vprim[59]=vprim[61]=vprim[67]=vprim[71]=vprim[73]=vprim[79]=1;

   vprim[83]=vprim[89]=vprim[97]=1;

astea nu se pot rezolva si altfel, ca nu prea inteleg ?
Niluco: de fapt, am inteles, da nu se poate si cu alte rezolvare la partea aia, de exemplu cu algoritmul pentru nr prime ?
boiustef: Da, se poate evident şi altfel... asta a fost prima idee...
boiustef: #include < iostream>
#include < fstream>
using namespace std;
ifstream fin("cautaprim.in");
ofstream fout("cautaprim.out");
int n, v[100];
int main()
{
fin >> n;
int x;
for(int i=1;i <= n;++i){
fin >> x;
v[x] = 1;
}
int rez = 0;
for(x = 97 ; x > 10 && rez == 0 ; x-=2)
if(v[x]==0){
int prim = 1;
for(int d = 2 ; d*d <=x ; ++d)
if(x%d == 0)
prim = 0;
if(prim)
rez = x;
}
fout << rez;
return 0;
}
boiustef: acum e cea mai... :)))
Niluco: mersiii muult
boiustef: cu plăcere
Alte întrebări interesante