Sa se scrie o functie care returneaza suma divizorilor unui numar.Se citesc mai multe numere de la tastatura. Sa se afiseze numerele perfecte.
Răspunsuri la întrebare
Răspuns de
3
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.
Alte întrebări interesante
Matematică,
8 ani în urmă
Arte,
9 ani în urmă
Ed. tehnologică,
9 ani în urmă
Matematică,
9 ani în urmă
Limba română,
9 ani în urmă