Un număr n se numeşte extraprim dacă atât el, cât şi orice număr obţinut prin permutarea circulară a cifrelor lui n, sunt numere prime. De exemplu, numărul 197 este un număr extraprim deoarece 197, 971, 719 sunt numere prime. Numărul 23 nu este extraprim deoarece 32 nu este prim.

a) Scrieţi definiţia completă a unui subprogram f, cu un parametru, subprogram care:

- primeşte prin intermediul parametrului a un număr natural cu cel mult 2 cifre (a>1) ;

- returnează suma tuturor exponenţilor din descompunerea în factori primi a valorii parametrului a.

b) Scrieţi un program C/C++ care citeşte de la tastatură un număr natural n, 2≤n≤99, şi care, folosind apeluri utile ale subprogramului f, verifică dacă n este un număr extraprim şi afişează pe ecran, în caz afirmativ mesajul DA, iar altfel mesajul NU.

 

#include<iostream.h>

int f(int n)

{  int s=0,d=2;

   while(n>1)

     if(n%d==0) { s++;

 n=n/d;

}

     else d++;

   return s;

}

void main()

{ int n, x,y,z;

  cin>>n;

  if(n<10) if(f(n)==1) cout<<"da";

  else cout<<"nu";

  else if(n<100) if(f(n)==1 && f(n%10*10+n/10)==1) cout<<"da";

else cout<<"nu";

       else

       {  x=n/100;

 y=n/10%10;

 z=n%10;

 if(f(n)==1 && f(x*100+z*10+y)==1 && f(y*100+x*10+z)==1 &&

    f(y*100+z*10+x)==1 && f(z*100+x*10+y)==1 && f(z*100+y*10+x)==1)

cout<<"da";

else cout<<"nu";

       }

}