Cerința
Dorel a scris un şir format din n
numere naturale nenule. Apoi a luat fiecare subşir şi a calculat produsul termenilor săi. Aflaţi câte dintre produsele efectuate sunt numere prime.
Date de intrare
Fișierul de intrare prim023.in
conține pe prima linie numărul n
, iar pe a doua linie n
numere naturale nenule separate prin spații.
Date de ieșire
Fișierul de ieșire prim023.out
va conține pe prima linie numărul produselor care sunt numere prime.
Restricții și precizări
1 ≤ n ≤ 5000
- numerele de pe a doua linie a fișierului de intrare vor fi mai mici decât
1.000.000.000
- un subşir conţine cel puţin un termen şi se formează alegând o parte din termenii şirului
Exemplu
prim023.in
3 1 2 3
prim023.out
4
Explicație
Subşirurile care au produsul elementelor număr prim sunt: 2
; 3
; 1,2
; 1,3
.
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 prim023:
#include <fstream>
using namespace std;
ifstream f("prim023.in");
ofstream g("prim023.out");
int n,i,j,k,p,u,x,ok,t,v[32001],prim[3500] ;
int main()
{
f >> n ;
v[1] = 1 ;
v[2] = 0 ;
k = 0 ;
for ( i=2 ; i<=32000 ; i++ )
if ( v[i]==0 )
{
k++ ;
prim[k] = i ;
j = i+i ;
while ( j<=32000 )
{
v[j] = 1 ;
j = j+i ;
}
}
u = 0 ;
p = 0 ;
for ( i=1 ; i<=n ; i++ )
{
f >> x ;
if ( x==1 ) u++ ;
else
{
ok = 1 ;
j = 1 ;
while (( prim[j]*prim[j]<=x )and( ok==1 ))
if ( x%prim[j]==0 ) ok = 0 ;
else j++ ;
if ( ok==1 ) p++ ;
}
}
if ( p==0 ) g << 0 ;
else if ( u==0 ) g << p ;
else
{
v[1] = p ;
k = 1 ;
for( i=1 ; i<=u ; i++ )
{
t = 0 ;
for( j=1 ; j<=k ; j++ )
{
x = ( v[j]*2+t )%10 ;
t = ( v[j]*2+t)/10 ;
v[j] = x ;
}
while ( t>0 )
{
k++ ;
v[k] = t%10 ;
t = t/10 ;
}
}
for ( i=k ; i>=1 ; i-- )
g << v[i] ;
}
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 #2330 prim023
Pe această pagină găsești rezolvarea de 100 de puncte pentru problema #2330 prim023 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!