Rezolvare completă PbInfo #380 aprim1

Un număr natural se numește aproape prim dacă poate fi scris ca produs de două numere naturale prime distincte.

Cerinţa

Se citește un număr natural și apoi n numere naturale. Să se determine câte dintre ele sunt aproape prime.

Date de intrare

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

Date de ieşire

Programul afișează pe ecran numărul C, reprezentând câte dintre numerele citite sunt aproape prime.

Restricţii şi precizări

  • 1 ≤ n ≤ 100
  • cele n numere citite sunt cuprinse între 1 și 1.000.000.000

Exemplu

Intrare

6
35 55 12 6 25 50

Ieșire

3

Cum e corect?

cout < "As la info"; cout << "As la info"; cout >> "As la info";

Felicitări! Poți mai mult?

Avem sute de probleme pentru tine, fiecare cu explicații ușor de înțeles.

Greșit, dar nu-i bai!

Antrenează-te cu sutele de probleme pe care ți le-am pregătit. Îți explicăm fiecare problemă în parte.

Rezolvare

Iată rezolvarea de 100 de puncte pentru problema aprim1:

#include <iostream>
using namespace std;

int main(){
    int n, c = 0, x;;
    bool aprim;
    cin >> n;
    for( ; n ; --n)
    {
        cin >> x;
        int d=2;
        aprim = false;
        while(!aprim && d*d<x){
            if(x % d == 0){
                int a = d, b = x / d;
                int prim = true;
                if(a < 2)
                    prim = false;
                if(a > 2 && a % 2 == 0)
                    prim = false;
                for(int k = 3; k * k <= a ; k += 2)
                    if(a % k == 0)
                        prim = false;
                if(prim){
                    prim = true;
                    if(b < 2)
                        prim = false;
                    if(b > 2 && b % 2 == 0)
                        prim = false;
                    for(int k = 3; k * k <= b ; k += 2)
                        if(b % k == 0)
                            prim = false;
                    if( prim )
                        aprim = true;
                }
            }
            if(d==2)
                d++;
            else
                d += 2;
        }
        if(aprim)
            c++;
    }
    cout << c;
    return 0;
}

Atenție

Enunțurile afișate pe această pagină aparțin exclusiv site-ului PbInfo. Astfel, pentru ștergerea conținutului, puteți să ne contactați la adresa Adresa de email.

Rezolvarea problemei #380 aprim1

Pe această pagină găsești rezolvarea de 100 de puncte pentru problema #380 aprim1 de pe PbInfo.ro. Atenție: nu încurajăm copiatul codului! Totuși, credem cu tărie că analizarea unei soluții corecte este o metodă foarte ușoară de a învăța informatică, astfel că oferim sursele pentru peste 1500 de probleme de pe platforma PbInfo.ro.

Pentru rezolvări PbInfo de la peste 1500 de probleme, vă invităm să intrați pe site-ul nostru!