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

Ce e gresit? Primesc doar 90 de puncte.

#include
using namespace std;
int main()
{ int X, b=0;

cin>>X;
while (X!=0)
{ b=b*10+X%10;
X=X/10; }

int i = 2, este_prim = 1;
while (i < b) {
if ( b % i == 0)
este_prim = 0;
++i;
}

if (b == 1)
este_prim = 0;
if (este_prim == 1){
cout<<"DA";}
else{
cout<<"NU";}
return 0;
}


Denhar: Care este cerința exactă a problemei ?
Denhar: 90 se dă atunci când nu este destul de eficient. Încearcă să înlocuiești acel while cu i, cu for(i=2;i<=;i++)
Denhar: i<=*
Denhar: i<=b*

Răspunsuri la întrebare

Răspuns de sirDumitru
0

Dacă condiție e să verifici dacă numărul introdus este prim sau nu, prea multe operații de verificare efectuiezi, e necesar să verifici doar o condiție de împărțire la el însuși și la 1.

#include <iostream>

using namespace std;


int main()

{

 int n, i;

 bool prim_sau_nu = true;


 cout << "Dati numarul intreg n: ";

 cin >> n;


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

 {

     if(n % i == 0)

     {

         prim_sau_nu = false;

         break;

     }

 }

 if (prim_sau_nu)

     cout << "Numarul introdus este prim!";

 else

     cout << "Numarul introdus nu este prim!";


 return 0;

}


Denhar: Adica algoritmul nu era destul de eficient :D.
Gizzm: Trebuie sa verific ca si numarul dar si inversul acestuia sunt nr prime
sirDumitru: Fii mai detaliat, inversul adică 29 <-> 92 ?
Gizzm: 92
Gizzm: da
Alte întrebări interesante