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.
Răspunsuri la întrebare
Răspuns de
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;
}
Alte întrebări interesante
Matematică,
8 ani în urmă
Limba română,
8 ani în urmă
Limba română,
8 ani în urmă
Matematică,
9 ani în urmă
Matematică,
9 ani în urmă
Fizică,
9 ani în urmă
Limba română,
9 ani în urmă