Informatică, întrebare adresată de corinaruxandra34, 8 ani în urmă

Ce este gresit la programul meu? Cerinta este: Programul citește de la tastatură numărul n. Programul afișează pe ecran numărul S, reprezentând suma divizorilor impari ai lui n. Date de intrare: 30; date de iesire: 24. Am construit programul, insa suma divizorilor mei impari imi iese 55 atunci cand rulez programul si nu inteleg de ce...Asta e programul meu:

#include

using namespace std;


int main()

{

int n;

cin>>n;

if(n!=1)

{

long long s=0;

for(int d=1; d*d<=n; d++)

{

if (d%2!=0)

{

if(n%d==0)

{

s+=d;

s+=n/d;

}

if(d*d==n)

s-=d;

}

}

cout<
}

else

cout<<1;

return 0;

}

Răspunsuri la întrebare

Răspuns de ionatanferariu
1

Răspuns:

Sigur ai greșit ceva pe acolo. Corect ar fi:

int main()

{

int n, s = 0, i;

cin >> n;

for (i = 1; i <= n; i++)

if (n % i == 0 && n % 2 != 0) s += i;

cout << s;

}

Nu înțeleg de ce ai pus s+=n/d;


corinaruxandra34: Multumesc!!
Alte întrebări interesante