👤

Problema #1295 CifPagini de pe pbinfo va rog!
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.


Răspuns :

Răspuns:

319

Explicație:

#include <iostream>

#include <fstream>

using namespace std;

ifstream f("cifpagini.in");

ofstream g("cifpagini.out");

int n,p,v,S,x,t,k,a[1001],d,i,S1;

int main()

{

   f>>n>>p>>v;

   S+=p;

   x=p+1;

   while(k<=n-1)

   {

       if(x%2!=0){d=3;

               t=1;

               while(d*d<=x)

               {if(x%d==0) t++;

                 d++;}

               if(t==1) {++k;

                  a[k]=x;}}

       x++;

   }

   for(i=1;i<=n-1;i++) S+=a[i];

   if(v==1) g<<S;

     else {p=1;

          x=S;

          k=0;

           while(S)

           {p*=10;

             k++;

            S/=10;

           }

           p/=10;

           while(k)

           {

               S1+=k*(x-p+1);

               k--;

               x=p-1;

               p/=10;

               }

           g<<S1;

          }

   return 0;

}

Răspuns:

#include <fstream>

using namespace std;

ifstream f("cifpagini.in");

ofstream g("cifpagini.out");

long long n,i,p,j,v[1000001],e,s;

int main()

{

   for(i=0;i<=1000000;i++)

       v[i]=0;

   v[1]=1;

   v[0]=1;

   for(i=2;i<=1000000/i;i++)

       if(v[i]==0)

           for(j=2;j<=1000000/i;j++)

               v[i*j]=1;

   //ciur Eratostene

   f>>n>>p>>e;

   --n;

   for(int i=p+1;;i++)

   {

       if(v[i]==0)

       {

           p=p+i;

           n--;

       }

       if(n==0)

           break;

   }

   if(e==1)

       g<<p;

   if(e==2)

   {

       if(p<=9)

           g<<p;

       else

       {

           s=9;

           if(p<=99)

           {

               s+=(p-9)*2;

           }

           else

           {

               s+=180;

               if(p<=999)

               {

                   s+=(p-99)*3;

               }

               else

               {

                   s+=2700;

                   if(p<=9999)

                   {

                       s+=(p-999)*4;

                   }

                   else

                   {

                       s+=36000;

                       if(p<=99999)

                       {

                           s+=(p-9999)*5;

                       }

                       else

                       {

                           s+=450000;

                           if(p<=999999)

                           {

                               s+=(p-99999)*6;

                           }

                           else

                           {

                               s+=5400000;

                               if(p<=9999999)

                               {

                                   s+=(p-999999)*7;

                               }

                           }

                       }

                   }

               }

           }

       }

       g<<s;

   }

   return 0;

}

Explicație: