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

Cerința
Se dau n numere naturale. Calculați câte dintre ele sunt prime, cel mai mare și cel mai mic număr prim.

Date de intrare
Programul citește de la tastatură numărul n, iar apoi n numere naturale.

Date de ieșire
Programul va afișa pe ecran numărul C A B, reprezentând câte dintre numerele date sunt prime, cel mai mic și cel mai pare număr prim.

Restricții și precizări
1 ≤ n ≤ 10000
cele n numere citite vor fi mai mici decât 1.000.000.000
în fiecare test va exista cel puțin un număr prim



Exemplu
Intrare

9
7 3 10 17 14 1 9 3 13
Ieșire

5 3 17


MadalinaMadutaa: dar am facut rezolvarea
MadalinaMadutaa: la aceasta problema
artur99: aaaa, nu mai ai nevoie?
MadalinaMadutaa: iti arat acum rezolvarea :))
MadalinaMadutaa: daca o pozi face mai simplu , de ce nu? :))
MadalinaMadutaa: #include <iostream>
using namespace std;
int main() {
int n , x, ct = 0, maxim , minim, gasit = 0;
cin >> n;
for(int i = 1; i <= n ; i ++) {
MadalinaMadutaa: cin >> x;
int prim = 1;
if(x < 2)
prim = 0;
if(x % 2 == 0 && x > 2)
prim = 0;
for(int d = 3; d * d <= x ; d += 2)
if(x % d == 0)
prim = 0;
MadalinaMadutaa: if(prim) {
ct ++;
if(gasit == 0)
maxim = minim = x, gasit = 1;
else {
if(x > maxim)
maxim = x;
if(x < minim)
minim = x;
}
}
}
cout << ct << " " << minim << " " << maxim;
return 0;
}
artur99: wooow
MadalinaMadutaa: :))))))

Răspunsuri la întrebare

Răspuns de artur99
4
#include <iostream>
using namespace std;

int prim(int n){
    int i, nj;
    if(n == 1) return 0;
    nj = n/2;
    for(i=2;i<=nj;i++){
        if(n % i == 0) return 0;
    }
    return 1;
}

int main(){
    int i, a, b, c = 0, t, gasit = 0, n;
    cin>>n;
    for(i=0;i<n;i++){
        cin>>t;
        if(prim(t)){
            if(!gasit){
                a = b = t;
                gasit = 1;
            }else{
                if(t < a) a = t;
                if(t > b) b = t;
            }
            c++;
        }
    }
    cout<<c<<' '<<a<<' '<<b;
}

MadalinaMadutaa: Thanks you.:))
MadalinaMadutaa: ce e nj?
artur99: e doar jumătatea lui n, am făcut variabilă separată ca să nu calculeze la fiecare repetare, astfel economisește timp. Dacă scriam direct în for n/2, de fiecare dată când testa condiția ar fi calculat n/2, și dacă ar fi testat de multe ori, dura mai mult timp :))
artur99: Înțelegi? :)))
artur99: Și dacă vrei să testezi http://cpp.sh/4qs6
MadalinaMadutaa: da. mersu
artur99: npc :))
Alte întrebări interesante