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

Rezolvare+explicatie.
Problema in poza

Anexe:

Răspunsuri la întrebare

Răspuns de boiustef
1

Răspuns:

#include <iostream>

using namespace std;

int a,b,c;

int putere(int a, int b, int c)

{

   if (b==0) return 1;

   else

   {

       if (b%2==0) return ((putere(a,b/2,c)%c)*(putere(a,b/2,c)%c))%c;

       else return ((a%c)*(putere(a,b-1,c)%c))%c;

   }

}

int main()

{

   cin >> a >> b >> c;

   cout << putere(a,b,c);

}

Explicație:

era de aşteptat să aplicăm recursia... e mai simplă logica rezolvării.

ce este de comentat?...  sfaturile sunt date în enunţ. Am mai adăugat restul şi de expresia de la return nu numai pentru fiecare factor, deoarece rezultatul produsului poate să fie mai mare ca  c


GabiAlex99: La fel !!
boiustef: salut. Aseară după ce am deconectat calculatorul mă gândeam la funcţia ta putere... :))) Şi m-am dat seama că pentru b=0 se obţine un ciclu infinit. Cred aici ai avut crash. Din restricţii b >=0, deci cayul particular trebuia să fie
if (b==0) , dar nu if (b==1)
boiustef: o zi frumoasă!
GabiAlex99: Ai dreptate, multumesc pentru observatie !! Daca in programu' meu inlocuiam if (b==0) luam 100 si cu if-urile alea :D.
boiustef: :)))
GabiAlex99: Daca mai ma puteti ajuta si pe mine cu ceva.. Tot nu inteleg care e raspunsul la un quiz ( acesta este http://prntscr.com/nmi1mf )
Deci, practic, functia returneaza fals daca n este 1 sau se imparte exact la 2/3/4/5 .. singurul raspuns care returneaza fals este 36.. Gresesc undeva sau nu inteleg intrebarea din quiz??
boiustef: Eu cred că funcţia a fost creată pentru a dtermina dacă numărul trimis în ea este prim sau nu. Ar fi normal ca funcţia să returneze true anume pt. numerele prime, dar acastă funcţie returnează true pentr 7, 49 şi 143. Dar dintre ele numai 7 este prim, deci răspuns greşit obţinem pentru N= 49 şi 143. Asta e părerea mea.
Nu se pune întrebarea pentru care valori primim false, ci pentru care valori primim răspuns greşit
GabiAlex99: Am inteles, ai dreptate :D. Nu prea intelegeam ce vrea sa zica prin "raspuns gresit", dar acum am vazut ca functia se numeste "isPrime", deci va returna true pt numerele prime/false pt celelalte. Multumesc mult!
boiustef: cu plăcere, succese
GabiAlex99: Multumesc, la fel !
Alte întrebări interesante