# PBinfo #1295 – CifPagini – Rezolvare C++

Sursa: Codul lui Andrei
Limbaj: C++
Autor rezolvare: deivid

## Enunț

Cerința
 Într-o bibliotecă se află o carte cu o proprietate mai ciudată. Este alcătuită din n volume, și pentru fiecare fiecare volum numărul de pagini este număr prim. Mai mult, numerele paginilor volumelor sunt numere prime consecutive.

Se dau numerele n p v reprezentând numărul de volume ale cărții, numărul de pagini ale primului volum și numărul cerinței care trebuie rezolvate. Să se afle:

a) numărul total de pagini;
b) numărul total de cifre folosite pentru numerotarea paginilor celor n volume.

Date de intrare
Fișierul de intrare cifpagini.in conține pe prima linie numerele n p v  reprezentând numărul de volume ale unei cărți, numărul de pagini ale primului volum și respectiv numărul cerinței.

Date de ieșire
Dacă v=1, fișierul de ieșire cifpagini.out va conține numărul nt , reprezentând numărul total de pagini.

Dacă v=2, fișierul de ieșire cifpagini.out va conține numărul np ,  reprezentând numărul total de cifre folosite pentru numerotarea paginilor celor n volume.

Restricții și precizări

1 ≤ n ≤ 1000 
1 ≤ p < 50.000
v poate fi  doar 1 sau 2;
Paginile volumelor se numerotează de la 1 la numărul total de pagini; dacă primul volum are k pagini, atunci volumul al doilea se va numerota cu k+1, ș.a.m.d.

Exemplul 1
cifpagini.in

3 103 1
cifpagini.out

319
Explicație 
v=1, deci căutam următoarele n-1 numere prime reprezentând numărul de pagini al fiecărui volum; acestea sunt 107 și respectiv 109 pagini.  103 + 107 + 109 = 319

Exemplul 2
cifpagini.in

3 103 2
cifpagini.out

849
Explicație
v=2, deci căutam următoarele n-1 numere prime reprezentând numărul de pagini al fiecărui volum și  calculăm suma lor (103+107+109=319). Numărul de cifre folosite în numerotarea celor 319 pagini este 849.

## Cod sursă C++

```cpp
#include <fstream>
using namespace std;
int j,n,p,y,v,nrp,li,lf,nr,m,num;
int nrprim(int t)
{
    long long i,x;
    bool prim;
    x=t;
    while(true)
    {
        prim=true;
        for(i=2;i*i<=x;i++)
           if(x%i==0){prim=false;break;}
    if(prim) break;
        x++;
    }
    return x;
}
int main()
{
   ifstream f("cifpagini.in");
   ofstream g("cifpagini.out");
   f>>n>>p>>v;
   y=p;
    for(j=1;j<=n;j++)
       {
          nrp=nrp+y;
          y=nrprim(y+1);
       }
    if(v==1) g<<nrp;
    else if(v==2)
    {
              lf=9;
              li=1;
              nr=1;
              while(true)
               {
                   if(nrp>=lf) m=m+lf*nr;
                   else if(nrp<lf) {m=m+nr*(nrp-li+1);break;}
                   lf=lf*10;
                   li=li*10;
                   nr++;
               }
        g<<m;
    }
    return 0;
}
```

## Resurse

- [Pagina originală](https://codulluiandrei.ro/rezolvari/pbinfo/1295)
- [Sursa C++](https://codulluiandrei.ro/rezolvari/pbinfo/1295/cod.cpp)
- [Sursa pe GitHub](https://raw.githubusercontent.com/codulluiandrei/pbinfo/main/pbinfo-1295/main.cpp)
- [Cursuri de informatică pentru BAC](https://codulluiandrei.ro/academia/info-curs/pachet-cpp/)
