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

Cerinţa
Se dă un șir cu n numere naturale. Determinați numărul total de cifre al tuturor numerelor prime din șir.
Date de intrare
Programul citește de la tastatură numărul n, iar apoi n numere naturale.
Date de ieşire
Programul afișează pe ecran numărul C, reprezentând numărul total de cifre al tuturor numerelor prime din șir.
Restricţii şi precizări
1 ≤ n ≤ 1000
cele n numere citite vor fi mai mici decât 1.000.000.000


boiustef: de unde e problema? si ce numar are. E fb sa se posteze si asta ca acel ce vine cu codul sa poata verifica daca e de 100 puncte... Codul de mai jos este neefectiv la determinarea primalitatii numarului...
boiustef: dar e un cod cu bune explicatii

Răspunsuri la întrebare

Răspuns de andriesboss92
3

#include <iostream>


using namespace std;


// Variabila n memoreaza cate numere trebuie citite;


// Variabila gasit memoreaza la cate numere se imparte numarul citite;


// Variabila C memoreaza numar total de cifre al numerelor prime citite;


/* Variabila cifra memoreaza ultima cifra a fiecarui numar pentru a putea

număra cate cifre are fiecare numar prim;*/


// Variabila copie memoreaza fiecare numar citit pentru a nu distruge numerele.


int main()

{

   int n, gasit=0, numar=0, C=0, cifra=0,copie=0;

   cin>>n;

   while(n!=0)

   {

       cin>>numar;

       for(int i=1;i<=numar;i++)

       {

            //instructiunea merge pana la numar/2 deoarece nu pot exista divizori proprii intre numar/2 si numar

           if (numar%i==0)//conditia ca numar sa fie divizor propriu al lui numar

               gasit++;

       }

       if(gasit==2)

       {

           copie=numar;

           // algoritmul de trunchiere ( determinarea cifrelor unui numar )

           while(copie!=0)

           {

               cifra=copie%10;

               C++;

               copie=copie/10;

           }

       }

       gasit=0;

       n--;

   }

   cout<<"Sunt "<<C<<" cifre din toate numerele prime";

}


boiustef: codul mai jos postat a luat 100 puncte pe pbinfo, e problema #404
andreea2003bianca: Multumesc mult :)
Răspuns de boiustef
2

#include <iostream>

using namespace std;

bool prim(int m)

{

   if (m==0 || m==1) return false;

   if (m==2) return true;

   if (m>2)

   {

       if (m%2==0) return false;

       else

       {

           for (int i=3; i*i<=m; ++i)

               if (m%i==0) return false;

       }

       return true;

   }

}

int nrcifre(int m)

{

   int c=1;

   while (m>9)

   {

      ++c; m/=10;

   }

   return c;

}

int main()

{

   int n, i, num, cifre=0;

   cin >> n;

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

   {

       cin >> num;

       if (prim(num))

           cifre+=nrcifre(num);

   }

   cout << cifre;

   return 0;

}

Alte întrebări interesante