Informatică, întrebare adresată de Bushmaster, 9 ani în urmă

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 rossetta
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.


Alte întrebări interesante