online: 3; azi: 1012; total: 53018 Manual clasa a x a - Tehnici de implementarea algoritmilor - Recursivitate

Manual clasa a X a

Tehnici de implementarea algoritmilor

Recursivitate

Să se verifice dacă un număr n este superprim . Un numar este superprim daca toate prefixele sale sunt numere superprime (de exemplu, numarul 171, este superprim , deoarece toate prefixele sale -1, 17 si 171 sunt numere prime) . Vor fi implementate recursiv: Subprogramul care testează dacă un număr este prim şi subprogramul care extrage toate prefixele numărului
# include < iostream >
# include < string >
using namespace std ;
bool testPrim ( int n, int d) {
if (n < 2 ) {
return false ;
}
if (n % d == 0 && d != 1 ) {
return false ;
}
if (d == n / 2 + 1 ) {
return true ;
}
return testPrim (n, d + 1 );
}
bool superprim ( int n) {
string strN = to_string (n);
for ( int i = 1 ; i <= strN. size (); i++) {
string prefix = strN. substr ( 0 , i);
int numPrefix = stoi (prefix);
if (! testPrim ( numPrefix , 2 )) {
return false ;
}
}
return true ;
}
int main () {
int n;
cout << " Introduceti numarul : " ;
cin >> n;
if ( superprim (n)) {
cout << n << " este superprim ." << endl ;
} else {
cout << n << " nu este superprim ." << endl ;
}
return 0 ;
}

În program, subprogramul testPrim () primește un număr n și un divizor d și verifică dacă numărul este prim. Se utilizează o abordare recursivă, unde se verifică dacă n este mai mic decât 2 sau dacă n este divizibil cu d diferit de 1. Dacă nu sunt îndeplinite aceste condiții, se continuă verificarea cu d + 1 .
Subprogramul superprim () primește un număr n și extrage toate prefixele sale, verificând apoi dacă fiecare prefix este prim folosind subprogramul testPrim () . În cazul în care toate prefixele sunt prime, se consideră că numărul este superprim și se returnează true . În caz contrar, se returnează false .
În funcția main () , se citește de la tastatură numărul n și se afișează dacă este sau nu superprim , folosind subprogramul superprim () .