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

Cerinţa

Se dau n numere naturale. Calculaţi suma obținută prin adunarea primului divizor prim al fiecărui număr citit.


Date de intrare

Programul citește de la tastatură numărul n, iar apoi n numere naturale, separate prin spaţii.


Date de ieşire

Programul afișează pe ecran numărul S, reprezentând suma cerută.


Restricţii şi precizări

1 ≤ n ≤ 1000

cele n numere citite vor fi mai mari decât 1 și mai mici decât 1.000.000.000



Exemplu

Intrare


5

15 13 39 49 25

Ieșire


31



eu mi-am facut un cod si daca puteti sa il editati? imi da 80(limita de timp)

#include
using namespace std;
int n,a,i,d,p=0;
int main()
{
cin>>n;
while(n){
cin>>a;
i=3; d=0;
if(a%2==0){
d=1;
p+=2;
}else{
while(d==0){
if(a%i==0){
d=1;
p+=i;
}else{
i+=2;
}
}
}
n--;
}
cout<

return 0;

}

Răspunsuri la întrebare

Răspuns de dariustamas123456
1

In linia 1, ar trebui sa se adauge "#include <iostream>" pentru a include biblioteca necesara pentru a utiliza functiile de intrare/iesire (cin/cout).

In linia 5, ar trebui sa se adauge un "int p=0;" pentru a initializa variabila p care va fi utilizata pentru suma obtinuta prin adunarea primului divizor prim al fiecarui numar citit.

In linia 8, ar trebui sa se adauge un if(a==2) p+=2; inainte de while pentru a lua in considerare cazul in care numarul introdus este 2, care este prim si nu poate fi divizat.

In linia 8, ar trebui sa se adauge un for(i=3; i*i<=a; i+=2) pentru a lua in considerare cazul in care numarul introdus este mai mare decat 2 si pentru a verifica daca acesta este divizibil cu un numar prim mai mare decat 2, in acest mod optimizand algoritmul.

In linia 10, ar trebui sa se adauge un if(i*i>a) break; pentru a iesi din bucla cand nu mai exista numere prime care sa fie divizori ai numarului introdus, acest lucru optimizand algoritmul.

In linia 14, ar trebui sa se adauge "n--;" dupa citirea fiecarui numar pentru a tine evidenta numarului de numere ramase de citit.

In linia 14, ar trebui sa se adauge "<< p" la finalul comenzii "cout" pentru a afisa suma obtinuta prin adunarea primului divizor prim al fiecarui numar citit.


Uite aici un alt program care ar functiona:
#include <iostream>

using namespace std;

int main() {

   int n, a, p = 0;

   cin >> n;

   for (int i = 0; i < n; i++) {

       cin >> a;

       for (int j = 2; j <= a; j++) {

           if (a % j == 0) {

               p += j;

               break;

           }

       }

   }

   cout << p;

   return 0;

}

Alte întrebări interesante