Răspuns :
1) Functie care returneaza suma divizorilor unui numar :
O sa prezint doua variante. Ambele sunt corecte. A doua varianta este mai eficienta (mai rapida). Daca nu ti-a fost prezentata la scoala a doua varianta, mai bine ramane prima varianta
varianta 1) : incercam potentialii divizori pana la n
int divizor (int n) {
int s = 0;
for(int d = 1; d <= n; d++)
if(n % d == 0)
s = s + d;
return s;
}
varianta 2) : incercam potentialii divizori pana la radical din n - 1 (varianta mai rapida decat prima). Se bazeaza pe faptul ca divizorii sunt perechi si daca ai descoperit un divizor poti sa calculezi perechea acestuia prin impartirea numarului la divizorul descoperit
int divizor (int n) {
int s = n + 1, d;
for(d = 2; d * d < n; d++)
if(n % d == 0) {
s = s + d;
s = s + n / d;
}
if(d * d == n)
s = s + d;
return s;
}
2) Se citesc mai multe numere de la tastatura. Sa se afiseze numerele perfecte
Nu ai precizat cate numere se citesc si care este valoarea maxima pe care o poate avea un numar. Daca precizai puteam sa iti ofer cea mai buna varianta de rezolvare
#include <iostream>
using namespace std;
int main() {
int n, val;
cin >> n;
for(int i = 1; i <= n; i++) {
cin >> val;
int s = 1;
for(int j = 2; j < val; j++)
if(val % j == 0)
s = s + j;
if(s == val && val != 1)
cout << val << " ";
}
return 0;
}
Aceasta rezolvare se poate optimiza mergand pana la radical din val.
O sa prezint doua variante. Ambele sunt corecte. A doua varianta este mai eficienta (mai rapida). Daca nu ti-a fost prezentata la scoala a doua varianta, mai bine ramane prima varianta
varianta 1) : incercam potentialii divizori pana la n
int divizor (int n) {
int s = 0;
for(int d = 1; d <= n; d++)
if(n % d == 0)
s = s + d;
return s;
}
varianta 2) : incercam potentialii divizori pana la radical din n - 1 (varianta mai rapida decat prima). Se bazeaza pe faptul ca divizorii sunt perechi si daca ai descoperit un divizor poti sa calculezi perechea acestuia prin impartirea numarului la divizorul descoperit
int divizor (int n) {
int s = n + 1, d;
for(d = 2; d * d < n; d++)
if(n % d == 0) {
s = s + d;
s = s + n / d;
}
if(d * d == n)
s = s + d;
return s;
}
2) Se citesc mai multe numere de la tastatura. Sa se afiseze numerele perfecte
Nu ai precizat cate numere se citesc si care este valoarea maxima pe care o poate avea un numar. Daca precizai puteam sa iti ofer cea mai buna varianta de rezolvare
#include <iostream>
using namespace std;
int main() {
int n, val;
cin >> n;
for(int i = 1; i <= n; i++) {
cin >> val;
int s = 1;
for(int j = 2; j < val; j++)
if(val % j == 0)
s = s + j;
if(s == val && val != 1)
cout << val << " ";
}
return 0;
}
Aceasta rezolvare se poate optimiza mergand pana la radical din val.
Vă mulțumim pentru vizita pe site-ul nostru dedicat Informatică. Sperăm că informațiile disponibile v-au fost utile și inspiraționale. Dacă aveți întrebări sau aveți nevoie de suport suplimentar, suntem aici pentru a vă ajuta. Ne face plăcere să vă revedem și vă invităm să adăugați site-ul nostru la favorite pentru acces rapid!