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

Pbinfo.ro #376
Cerinţa
Se citește un număr natural n. Să se determine suma divizorilor săi.

Date de intrare
Programul citește de la tastatură numărul n.

Date de ieşire
Programul afișează pe ecran numărul S, reprezentând suma divizorilor lui n.

Restricţii şi precizări
0 < n ≤ 1.000.000.000

Am incercat s-o rezolv, dar nu imi da toate punctele. La doua din exemple imi spune ca am limita de timp depasita, iar la ultimul imi da raspuns gresit.

Codul meu:
#include <iostream>
using namespace std;
int main()
{
long long int n;
int S=0;
cin >> n;
for(int i=2;i<=n/2;i++)
if(n%i==0) S=S+i;
S=S+1+n;
cout << S;
return 0;
}

Mentionez ca am incercat de asemenea cu toti divizorii, adica i de la 1 la n si i-am pus in suma... Tot nu gasesc rezolvarea corecta.

Dau coroana pentru cel care explica si imi da rezolvarea de 100p.


Zlatan: Parcurgi doar până la radical din n, iar daca "i" este divizor, îl aduni la sumă împreună cu n/i ( care este tot un divizor a lui n). Trebuie avut în vedere cazul în care n este pătrat perfect şi se adună doar i, deoarece i şi n/i au aceeaşi valoare când i = radical din n.
Zlatan: Numărul n se declară int, suma se declară long long, ca să nu depăşeasca valoarea maximă admisă de int.

Răspunsuri la întrebare

Răspuns de mirelavoicu31
13
#include <iostream> using namespace std; int main() { int n,i; long long s; cin>>n; s=0; for(i=1; i*i<=n; i++) if(n%i==0) {s=s+i; if(n/i!=i) s=s+n/i; } cout<<s; return 0; }

Deni00: Multumesc
Alte întrebări interesante