Cerința
Se dau n
numere naturale. Pentru fiecare număr k
dat, să se afle cea mai lungă secvenţă de numere naturale consecutive din şirul 1,2,3,...,k
, astfel încât orice număr din secvenţă să nu fie prim.
Date de intrare
Fișierul de intrare prim997.in
conține pe prima linie numărul n
, iar pe a doua linie n
numere naturale separate prin spații.
Date de ieșire
Fișierul de ieșire prim997.out
va conține pe linia i
, primul număr din secvenţă şi lungimea secvenţei, pentru cel de-al i
-lea număr de pe linia a doua a fişierului de intrare.
Restricții și precizări
1 ≤ n ≤ 100.000
- numerele de pe a doua linie a fișierului de intrare vor fi mai mici decât
10.000.000
- dacă sunt mai multe secvenţe de lungime maximă cu numere consecutive neprime, se va afişa cea cu primul număr din secvenţă minim
Exemplu
prim997.in
3 4 11 30
prim997.out
1 1 8 3 24 5
Explicație
În şirul 1,2,3,4
secvenţa de lungime maximă cu numere neprime este 1
, în şirul 1,2,3,4,5,6,7,8,9,10,11
secvenţa este 8,9,10
, iar în şirul 1,2,3,4,...,30
este 24,25,26,27,28
.
Cum e corect?
cout < "As la info";
cout << "As la info";
cout >> "As la info";
Felicitări! Poți mai mult?
Avem sute de probleme pentru tine, fiecare cu explicații ușor de înțeles.
Greșit, dar nu-i bai!
Antrenează-te cu sutele de probleme pe care ți le-am pregătit. Îți explicăm fiecare problemă în parte.
Rezolvare
Iată rezolvarea de 100 de puncte pentru problema prim997:
#include <fstream>
#define m 10000000
using namespace std;
ifstream f("prim997.in");
ofstream g("prim997.out");
int n,lmax,lung,pozc,i,j,k,pmax,lm[m+1],p[m+1] ;
char v[m+1] ;
int main()
{
f >> n ;
v[1] = 1 ;
p[1] = 1 ;
lm[1] = 1 ;
v[2] = 0 ;
lmax = 1 ;
pmax = 1 ;
lung = 0 ;
for ( i=2 ; i<=m ; i++ )
if( v[i]==0 )
{
lm[i] = lmax ;
p[i] = pmax ;
j = i+i ;
while ( j<=m )
{
v[j] = 1 ;
j = j+i ;
}
lung = 0 ;
}
else
{
lung++ ;
if ( v[i-1]==0 ) pozc = i ;
if ( lung > lmax ) { lmax = lung ; pmax = pozc ; }
lm[i] = lmax ;
p[i] = pmax ;
}
for ( i=1 ; i<=n ; i++)
{
f >> k ;
g << p[k] << " " << lm[k] << "\n" ;
}
return 0;
}
Atenție
Enunțurile afișate pe această pagină aparțin exclusiv site-ului PbInfo. Astfel, pentru ștergerea conținutului, puteți să ne contactați la adresa .
Rezolvarea problemei #2327 prim997
Pe această pagină găsești rezolvarea de 100 de puncte pentru problema #2327 prim997 de pe PbInfo.ro. Atenție: nu încurajăm copiatul codului! Totuși, credem cu tărie că analizarea unei soluții corecte este o metodă foarte ușoară de a învăța informatică, astfel că oferim sursele pentru peste 1500 de probleme de pe platforma PbInfo.ro.
Pentru rezolvări PbInfo de la peste 1500 de probleme, vă invităm să intrați pe site-ul nostru!