Să se scrie o funcție C++ care să determine suma divizorilor primi ai unui număr natural transmis ca parametru. Funcția întoarce rezultatul prin intermediul unui parametru de ieşire.
Restricţii şi precizări
numele funcției va fi sum_div_prim
funcția va avea doi parametri, reprezentând numărul pentru care se calculează suma divizorilor, respectiv valoarea calculată
numărul pentru care se calculează suma divizorilor primi va fi mai mare decât 1 și mai mic decât 2.000.000.000
Soluţia propusă va conţine doar definiţia funcţiei cerute. Prezenţa în soluţie a altor instrucţiuni poate duce erori de compilare sau de execuţie care vor avea ca efect depunctarea soluţiei.
Nu inteleg de ce iau 80p la aceasta problema
void sum_div_prim( int n,int &s)
{
int x = 2;
s = 0;
while ( n != 1 )
{
if ( n % x == 0 )
{
s = s + x;
while ( n % x == 0 )
n = n/x;
}
else
x++;
}
}
aceasta este rezolvarea mea.
Răspunsuri la întrebare
Răspuns de
4
Ai solutia in atasament.
Anexe:
Razzvy:
Probleama la programul tau era timpul
Răspuns de
4
void sum_div_prim(int n, int &s)
{
int d, i, nr;
if(n == 1) {s = 0; return;}
bool prim = true;
for(i = 2; i * i <= n; i ++)
if(n % i == 0)
{
prim = false;
break;
}
if(prim)
{
s = n;
return;
}
else
{
s = 0;
for(d = 2; d * d < n; d ++)
if(n % d == 0)
{
prim = true;
for(i = 2; i * i <= d; i ++)
if(d % i == 0)
{
prim = false;
break;
}
if(prim) s = s + d;
prim = true;
nr = n / d;
for(i = 2; i * i <= nr; i ++)
if(nr% i == 0)
{
prim = false;
break;
}
if(prim) s = s + nr;
}
if(d * d == n)
{
prim = true;
for(i = 2; i * i <= d; i ++)
if(d % i == 0)
{
prim = false;
break;
}
if(prim) s = s + d;
}
}
return;
}
{
int d, i, nr;
if(n == 1) {s = 0; return;}
bool prim = true;
for(i = 2; i * i <= n; i ++)
if(n % i == 0)
{
prim = false;
break;
}
if(prim)
{
s = n;
return;
}
else
{
s = 0;
for(d = 2; d * d < n; d ++)
if(n % d == 0)
{
prim = true;
for(i = 2; i * i <= d; i ++)
if(d % i == 0)
{
prim = false;
break;
}
if(prim) s = s + d;
prim = true;
nr = n / d;
for(i = 2; i * i <= nr; i ++)
if(nr% i == 0)
{
prim = false;
break;
}
if(prim) s = s + nr;
}
if(d * d == n)
{
prim = true;
for(i = 2; i * i <= d; i ++)
if(d % i == 0)
{
prim = false;
break;
}
if(prim) s = s + d;
}
}
return;
}
Alte întrebări interesante
Limba română,
8 ani în urmă
Limba română,
8 ani în urmă
Biologie,
8 ani în urmă
Matematică,
9 ani în urmă
Matematică,
9 ani în urmă
Limba română,
9 ani în urmă
Istorie,
9 ani în urmă